Javascript范围,如何保留模块
我有一个函数,它在setTimeout时递归调用自己。问题是,它一路上失去了作用范围 这就是我所拥有的Javascript范围,如何保留模块,javascript,Javascript,我有一个函数,它在setTimeout时递归调用自己。问题是,它一路上失去了作用范围 这就是我所拥有的 var module = function () { function init() { if (notYetReadySoTryAgain) { setTimeout(this.init,100); return } } } 第二次通过时,我得到一个无法找到init的错误(在窗口对象上) 处理跨
var module = function () {
function init() {
if (notYetReadySoTryAgain) {
setTimeout(this.init,100);
return
}
}
}
第二次通过时,我得到一个无法找到init的错误(在窗口对象上)
处理跨setTimeout维护模块引用的规范方法是什么?使用自执行来封闭作用域;同时删除
此
var module = function () {
(function init() {
if (notYetReadySoTryAgain) {
setTimeout(init,100);
return
}
})(notYetReadySoTryAgain);
}
删除此。,它就会工作
var module = function () {
function init() {
if (notYetReadySoTryAgain) {
setTimeout(init,100);
return
}
}
}
您也可以选择使用setInterval
。试试以下方法:
var module = (function () {
(function init() {
if (notYetReadySoTryAgain) {
setTimeout(init,100);
return
}
})()
})()
你做个了结。谷歌搜索“javascript闭包”哪里定义了
notYetReadySoTryAgain
?只需省略,这与范围无关。您可以通过setTimeout(init,100)
直接引用init
函数-它不是任何东西的属性。