【发布时间】:2013-12-06 20:36:40
【问题描述】:
灵感来自这个 Stackoverflow 问题,João Silva 的回答:setTimeout with arguments
我想知道是否有人可以向我解释这段代码 sn-p 与后者有何不同:
// Parameter to use
var bar = 'bar';
// Go
setTimeout(
(function(arg1){
return function () {
console.log(arg1); //ya arg1 has the value: 'bar'!
}
}(bar)), 2000);
我原以为括号会略有不同,我知道这是一个立即调用的函数表达式(我相信是 Ben Alman 创造的)结合了一个闭包,但我不完全理解这段代码是如何执行的。
我正在想象一个由闭包调用的自调用匿名函数,我理解它是如何工作的,至少是稍微理解。
// Parameter to use
var bar = 'bar';
// Go
setTimeout(
(function(arg1){
return function () {
console.log(arg1); //ya arg1 has the value: 'bar'!
}
})(bar), 2000);
所以两者都有效,并且两个代码 sn-ps 之间只有一个括号差异,而且我再次不是 javascript 专家,但我直观地觉得这两个 javascript sn-ps 都非常跨浏览器兼容。但两者之间到底有什么不同呢?
【问题讨论】:
-
您的示例没有多大意义,您的 IIFE 应该返回一个 func 引用以设置为 setTimeout 的回调?您所拥有的将立即被调用。
-
但是两个 sn-p 都不会立即被调用,两者都是在分配的 2 秒超时后调用...
-
哎呀,对不起,你是对的,我更新了我的答案,现在两个 js sn-ps 在分配的 2 秒超时后都会被调用
-
仅供参考,“立即调用函数表达式”和“自调用匿名函数”是同义词。
标签: javascript