自我JavaScript函数执行的语法

时间:2016-03-11 18:44:39

标签: javascript

这不是What is the (function() { } )() construct in JavaScript?

的副本

因为我完全知道语法的含义:自我执行功能。

为什么我需要这种语法来自行执行一个函数:

(function() {
    alert('I don\'t have a name, I AM anonymous and I\'m autoexecuting myself');
}());

虽然这种语法不起作用:

(function() {
    alert('I don\'t have a name, I AM anonymous and I\'m autoexecuting myself');
});

3 个答案:

答案 0 :(得分:7)

这是因为没有任何东西正在执行该功能。通常*这是在最后用括号完成的。包装括号不是使其成为立即调用的函数的原因。例如:

var f = function() {
  console.log('Call f');
  return 1;
};

这定义了一个你以后可以调用的函数,对吧?所以要调用它,你会这样做:

f();

现在想象一下:

var f = function() {
  console.log('Call f');
  return 1;
}();

由于您调用了该函数,f将等于1。附加的包装括号帮助读者知道该函数将立即执行。这就是为什么你可以做以下任何一个(以及更多):

function() {
  ...
}();

(function() {
  ...
}());

!function() {
  ...
}();

// This one seems to be the most common
(function() {
  ...
})();

对于将来的信息,这实际上被称为immediately-invoked function expression or IIFE

*此规则有一些例外情况。具体来说,您可以将new用于不带参数的函数,并且可以在对象上使用getter和setter。有关详细信息,请参阅this question

答案 1 :(得分:1)

因为必须调用函数才能运行,并使用()调用函数。

答案 2 :(得分:0)

(function(){ ... })()是一个函数调用,其中(function() { ... })是一个带括号的函数表达式,它不会调用函数,无论如何读取这个https://github.com/getify/You-Dont-Know-JS,你都不会后悔! / p>