iife javascript 变量生命周期
iife javascript variable lifetime
为什么在 iife 的直接范围内的变量值在保存其值方面以与全局变量类似的方式存在。这真的让我很困惑。
(function(){
var display = document.getElementById('display');
var button = document.getElementById('button');
var count = 0;
display.innerHTML = 0;
button.onclick = function(){
count ++;
display.innerHTML = count;
}
})();
它幸存下来是因为在您的某个 HTMLElements 中仍然引用它。
当您将该 lambda 附加到 button.onclick
属性 时,lambda 中会引用 count
。
只要该 HTMLElement 存在,或者 onclick
属性 仍然分配给该 lambda,那么 count
也会存在。
这叫做"closure"。
你的函数在它的主体中引用 display
和 count
,所以它会 "capture" 这些变量和 "keep them alive" 只要它本身是活着的(它会在这里是因为您将它附加到 DOM 作为事件处理程序)。
为什么在 iife 的直接范围内的变量值在保存其值方面以与全局变量类似的方式存在。这真的让我很困惑。
(function(){
var display = document.getElementById('display');
var button = document.getElementById('button');
var count = 0;
display.innerHTML = 0;
button.onclick = function(){
count ++;
display.innerHTML = count;
}
})();
它幸存下来是因为在您的某个 HTMLElements 中仍然引用它。
当您将该 lambda 附加到 button.onclick
属性 时,lambda 中会引用 count
。
只要该 HTMLElement 存在,或者 onclick
属性 仍然分配给该 lambda,那么 count
也会存在。
这叫做"closure"。
你的函数在它的主体中引用 display
和 count
,所以它会 "capture" 这些变量和 "keep them alive" 只要它本身是活着的(它会在这里是因为您将它附加到 DOM 作为事件处理程序)。