如果我像这样创建一个立即调用的函数:
// assigned to variable and then invoked it
var iife = (foo)();
// defined the function separately
function foo() {
var bar = 'baz';
console.log(bar);
}
它是否是有效的IIFE?
答案 0 :(得分:3)
IIFE是这样的:
(function () {
// do some here
})();
在您的示例中,将foo设置为常规函数,然后执行它。
但是foo将是常规变量。 在真正的IIFE中,它不为当前作用域中的函数创建变量,它只是执行它。
答案 1 :(得分:2)
此代码有效:
{% for key, value in scoruri.items %}
{{ key }}:{{ value }}
{% endfor %}
但与之没有区别:
function foo (){
console.log('IIFE');
}
var bar = (foo)(); // IIFE
console.log(bar) // undefined
这是因为IIFE只是一个调用自身的函数:
var bar2 = foo(); // IIFE
console.log(bar2) // undefined
尽管你的代码有效但我认为(function(){
// do something and then forget about this function
})();
概念不是IIFE,即使它使用的是一种语法。在其中使用var iife = (foo)();
意味着它通过引用(正常函数调用的特性)执行函数。 foo
是多余的,因此您应该只使用()()
答案 2 :(得分:1)
IIFE :
function foo() {
var bar = 'baz';
console.log(bar);
}
var iife = (foo)();
这只是您无缘无故地将(foo)
分组的正常功能。
您的正常功能应如下所示:
function foo() {
var bar = 'baz';
console.log(bar);
}
foo();
你的IIFE应该是这样的:
(function () {
var bar = 'baz';
console.log(bar);
})();