我前一段时间问了这个问题,并对接受的答案感到满意.然而,我刚才意识到以下技术:
var testaroo = 0;
(function executeOnLoad() {
if (testaroo++ < 5) {
setTimeout(executeOnLoad, 25);
return;
}
alert(testaroo); // alerts "6"
})();
Run Code Online (Sandbox Code Playgroud)
返回我期望的结果.如果TJCrowder从我的第一个问题的回答是正确的,那么这种技术不应该起作用吗?
任何人都可以解释Internet Explorer和Firefox之间在以下方面的行为差异:
var myNamespace = (function () {
var exposed = {};
exposed.myFunction = function myFunction () {
return "Works!";
}
console.log(myFunction());
// IE: "Works!"
// Firefox: ReferenceError: myFunction is not defined
console.log(exposed.myFunction());
// IE: "Works!"
// FF: "Works!"
return exposed;
})();
console.log(myNamespace.myFunction());
// IE: "Works!"
// FF: "Works!"
Run Code Online (Sandbox Code Playgroud)
在Internet Explorer中这种方法可以让我通过使用调用我的函数从我的命名空间函数内部myFunction()
或exposed.myFunction()
.
在我的名字功能之外,我可以使用 myNamespace.myFunction()
在Firefox中,结果是相同的,除了没有用的裸命名函数调用.
应该有用吗?如果不应该,那么为什么不呢?
如果它应该是一个已知的错误?
我已经遇到了这个jquery插件,我完全理解这是如何工作的:
$.functionone = function(){
function setOptions(newOptions){
...
}
this.setOptions = setOptions;
}
Run Code Online (Sandbox Code Playgroud)
我不明白这实际上是做什么的?this.setOptions = setOptions
你可以调用没有括号的函数吗?什么是之间的关系this.setOptions
,并setOptions
通过自身?