2011-12-10 12 views

Odpowiedz

11

Jest to tylko standardowa sytuacja zakresu - fakt, że jest to anonimowe wyrażenie funkcji przekazywane jako parametr do innej funkcji, nie ma znaczenia. Zauważ, że w twojej funkcji performAction() (której nie wyświetlasz) nie będzie on miał żadnego dostępu do str, który jest parametrem funkcji zwrotnej - jeśli performAction() odniesie str, otrzyma globalną zmienną "internet" (lub jej własną lokalną str, jeśli zdefiniowano).

Parametry funkcji są, dla celów zakresu, takie same jak zmienne lokalne tej funkcji, co oznacza, że ​​zamaskowują one inne zmienne o tej samej nazwie z zewnętrznego zakresu - ale zmienne o różnych nazwach są nadal dostępne, nawet jeśli są zdefiniowane w szerszym zakresie zakres.

gdzie może uzyskać mylące jest, jeśli można zrobić coś takiego:

var str = "internet"; 

(function(str) { 
    console.log(str); // "internet" 
    str = "local param"; 
    console.log(str); // "local param" 
})(str); 

console.log(str); // "internet" 

w tym przypadku mam funkcji z parametrem zwanym str ale kiedy ja to nazywam ja przechodząc w inny str. Zauważ, że zmiana str w obrębie tej funkcji zmienia tylko lokalny str, a nie globalny. Są to dwie różne zmienne ...

7

Nie ma problemu z technicznie. Funkcja zarejestruje numer str, który jest aktualnie w zasięgu (twój parametr).

Z oczywistych powodów nie jest to dobrym pomysłem. Przynajmniej tworzy nieczytelny kod.

Powiązane problemy