Ci sono due problemi, quello di cui JSHint ti avvisa e uno più fondamentale.
La cosa di cui JSHint ti avvisa è che in teoria, ogni volta che viene eseguito il ciclo, viene creata una nuova funzione. Questo sarebbe meglio:
for (var person in people) {
person.forEach(handlePerson);
}
function handlePerson(item) {
console.log(item)
}
dico "in teoria" perché anche se le specifiche richiede che un nuovo oggetto funzione creato ogni volta, ciò non significa motori non può riutilizzare il sottostante attuazione della funzione, e ciò non significa che i motori non possano riutilizzare lo stesso oggetto funzione se non gli hai assegnato altre proprietà o tieni un riferimento ad esso. I asked the V8 guys about it (V8 è il motore JavaScript in Chrome) e hanno detto che Chrome "... nella maggior parte dei casi ..." riutilizza l'implementazione della funzione sottostante per diversi oggetti funzione creati nello stesso punto nel codice sorgente e che si sarebbero "aspettati" che la maggior parte degli altri motori avrebbe fatto lo stesso.
Quindi JSHint potrebbe essere un po 'esagerato in questo caso particolare. Ma è spesso un avvertimento utile, in particolare se le funzioni che stai creando all'interno del ciclo si riferiscono a variabili il cui contenuto cambia durante il ciclo, che è il classico errore di chiusura che le persone fanno.
Ma più fondamentalmente, è un person
String
(è il nome di una proprietà in people
), e String
non avere forEach
. Volevi:.
for (var person in people) {
people[person].forEach(handlePerson);
}
function handlePerson(item) {
console.log(item)
}
... per esempio, people[person]
per ottenere la matrice per quella chiave.
fonte
2012-05-04 15:35:53
Immagino che intendesse "persone [persona] .for Ogni (...)". Ad ogni modo, questo avvertimento sembra essere piuttosto stupido con i moderni motori JS - molto probabilmente non creeranno una nuova funzione per ogni iterazione. – ThiefMaster
Almeno V8 non: http://stackoverflow.com/questions/10160275/v8-internals-handling-of-anonymous-functions – ThiefMaster
'persone' è un oggetto (contenente matrici). –