为什么Iife在一个简单的示例中不起作用?

时间:2019-02-12 12:26:28

标签: javascript iife

我不明白为什么函数表达式调用不起作用并引发错误。

你能跟我解释一下吗?

var a = function (x) {
  alert(x)
}

(function() {
   a(1);
}());

谢谢大家

任务比我想象的要容易得多

3 个答案:

答案 0 :(得分:9)

这是因为JS会将IIFE解析为该函数的参数调用,所以请使用分号来做到这一点

var a = function (x) {
  alert(x)
};    
(function() {
   a(1);
}());

答案 1 :(得分:1)

由于目前在调用函数的地方,分配尚未发生。

var a; // hoisted, value undefined, no function

// later

a = function (x) {
    alert(x);
}(function() {
    a(1);      // a is still no function
}());

或者您需要插入分号以将分配与呼叫分开,

var a = function(x) {
  console.log(x);
};
(function() {
  a(1);
}());

或以void进行分隔

var a = function(x) {
  console.log(x);
}
void (function() {
  a(1);
}());

答案 2 :(得分:0)

在IIFE中定义函数a参见documentation

(function() {
  function a(x) {
    alert(x)
  }
  a('x')
}());