Попытка выяснить, почему функция self invoking сохраняет личное значение, а другой тип - нет.Функция самозапуска не сохраняет личное значение
ли увеличить значение
var a = function(){
var myval=10;
return function(){
return myval++;
}
}();
console.log(a());
console.log(a());
console.log(a());
Выход: 10,11,12
в то время как этот код не увеличивает значение
var a = function(){
var myval=10;
return function(){
return myval++;
}
};
console.log(a()());
console.log(a()());
console.log(a()());
Выход: 10,10,10
Я должен уйти прямо сейчас, но с головы до головы. Я считаю, что это потому, что IIFE в # 1 создает область для myval, и каждый экземпляр вызова внутренних функций указывает на myval. Второй создает новую область с новым myval для каждого вывода console.log, поэтому он многократно возвращает 10. – timolawl
Любопытно, почему 10? Если вы измените (в не вызываемой self-функции) 'myval ++' на 'myval + 1' или' ++ myval', он вернет 11 (всегда, как и когда функция не вызывается самостоятельно). –
это означает, что первый метод создает только один экземпляр внешней функции, а второй метод создает 3 экземпляра внешней функции? – LilRazi