我遇到了以下代码。有人可以向我解释一下吗?我不确定它会如何执行?有没有具体的理由这样写呢?
var foo = (function() {
// ...bunch of code
return function(param1) {
// ...bunch of code
return var1;
}
})();
编辑:我知道外部(...)();
会立即执行。我不确定为什么将它分配给变量foo
。我想当IIFE执行时它只会执行return ...
内码。但是当内部function ...
内的代码被执行时?行return var1
执行时?我希望现在很明显是水
答案 0 :(得分:1)
你所看到的是一个名为Immediately-invoked function expression的JS习语。摘自Wikipedia:
一个立即调用的函数表达式(或IIFE,发音为“iffy”1)是一种JavaScript编程语言习惯用法,它使用JavaScript的函数作用域生成一个词法范围。立即调用的函数表达式可用于避免块内的变量提升,防止污染全局环境,同时允许公共访问方法,同时保留函数中定义的变量的隐私。这个概念被称为一个自动执行的匿名函数,[2]但Ben Alman在讨论了comp.lang.javascript
之后不久,将IIFE这个术语引入了一个语义更准确的术语。
从提取中可以看出,它的主要目的主要是避免污染全局命名空间,尽管它也被大量用于利用闭包。
<强>更新强>
在Javascript中,函数是第一类对象。这意味着它们可以像任何其他对象一样传递。它们也可以分配给变量。
你提到的函数只是返回一个函数(就像它可能返回一个int或一个对象文字),它被赋值给变量foo
。 foo
然后有对函数的引用,可以像任何正常函数一样执行(即foo('a'))。
顺便说一句,返回另一个函数或者将一个或多个函数作为参数的函数称为高阶函数。
希望这能澄清事情。
答案 1 :(得分:0)
原因很难猜测,但可能是混淆,以避免抄袭
执行将如下:
var foo将接收函数调用的结果(赋值后的括号包含函数声明,紧接在那些之后,另一对括号是那些函数参数)
第一个匿名函数将执行一堆代码,然后返回其他函数评估的内容
第二个匿名函数很好地执行另一堆代码,最后返回var1
ergo:它与执行一串代码相同,将结果存储在var1中,然后存储在var foo = var1
中,以简化说明目的