将立即调用的函数定义为普通函数并稍后将其赋值给变量是否有效?

时间:2016-11-17 09:06:48

标签: javascript

如果我像这样创建一个立即调用的函数:

// assigned to variable and then invoked it
var iife = (foo)();

// defined the function separately
function foo() {
  var bar = 'baz';
  console.log(bar);
}

它是否是有效的IIFE?

3 个答案:

答案 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);
})();