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 ...
Nie - po prostu nie zapominaj, że nie jest to właściwie ta sama zmienna. –
Dziękuję bardzo! –