Javascript范围,如何保留模块
问题描述:
我有一个函数,它在setTimeout上递归调用自己。问题是它一路上失去了它的范围。Javascript范围,如何保留模块
所以这是我...
var module = function() {
function init() {
if (notYetReadySoTryAgain) {
setTimeout(this.init,100);
return
}
}
}
通过我得到的init不能找到(window对象)错误的第二次。
通过setTimeout处理维护对模块的引用的规范方法是什么?
答
使用自行执行将范围括起来;删除this
以及。
var module = function() {
(function init() {
if (notYetReadySoTryAgain) {
setTimeout(init,100);
return
}
})(notYetReadySoTryAgain);
}
答
删除this.
它会工作。使用setInterval
也可以选择你。
答
试试这个:
var module = (function() {
(function init() {
if (notYetReadySoTryAgain) {
setTimeout(init,100);
return
}
})()
})()
你做一个封闭。 google搜索'javascript closure' – unludo
'notYetReadySoTryAgain'定义在哪里? –
只需省略['this'关键字](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this),这与范围无关。你可以通过'setTimeout(init,100)'直接引用'init'函数 - 它不是任何属性。 – Bergi