我花了很多时间来理解 this、func.bind(this)、func.bind(exports) 和 function() { that.func(); }。但我无法理解的是,当模块中没有定义导出时,以下 setTimeout 如何能够在私有(private)范围内查看和访问 doStuff() ?
window.TestModule = (function() {
function init() {
document.getElementById('testbt').onclick = test;
}
function test() {
setTimeout(function() {
alert(this); //window
doStuff(); //works! wow!
}, 250);
}
function doStuff() {
//do stuff
}
return {
init: init
};
}());
TestModule.init();
最佳答案
doStuff
在范围内,这就是原因。它在 setTimeout(function(){})
中找不到它,因此它会查找下一个作用域。它在 function test () {}
中找不到它,因此它会查找下一个作用域。它在 (function(){})()
中找到它并使用该定义。
如果你没有定义doStuff
,它会抛出一个ReferenceError
,因为它最终会到达window
范围而找不到它,并且不会再有下一个可寻找的范围了。
关于javascript - setTimeout 如何查看模块内的私有(private)函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32428420/