function outer(a, b) {
a.addEventListener('click', function inner(ev) {
console.log(ev);
});
}上面示例中的事件侦听器函数是否仍然保持对外部函数[作用域]的引用并导致闭包,即使内部函数没有从外部显式地提到任何变量?
只要事件侦听器函数存在,保存变量'a‘和'b’的上下文是否仍然保存在内存中?
发布于 2019-12-24 07:48:04
理论上,如果外部变量的任何内部函数仍然可达,则应保留其外部变量。
然而,现代浏览器(至少Chrome和FF )会查看它们的内部,并确定外部变量本身是否会被实际使用,如果没有,它们将被垃圾收集。
为了测试它:
复制和粘贴以下代码并在浏览器控制台中运行。
然后在控制台中运行console.log(a)和console.log(b)以查看其暂停时的差异。
function outer(a, b) {
setTimeout(function inner() {
debugger;
a = 0;
}, 1000);
}
var testA = 1
var testB = 1
outer(testA, testB);https://stackoverflow.com/questions/59464736
复制相似问题