JavaScript中的(function(){})()构造是什么?

我曾经知道这意味着什么,但我现在正在努力...

这基本上是说document.onload

(function () {

})();

它是立即调用的函数表达式,简称IIFE 。 它在创建后立即执行。

它与任何事件的任何事件处理程序(如document.onload )无关。
第一对括号(function(){...})将代码(在这种情况下是一个函数)转换为一个表达式,第二对括号(function(){...})()调用该评估表达式产生的函数。

当试图避免污染全局名称空间时,通常会使用此模式,因为在IIFE内部使用的所有变量(如任何其他正常函数)在其范围外不可见。
这就是为什么,也许你把这个构造与window.onload的事件处理器混淆了,因为它经常用作这个:

(function(){
    // all your code here
    var foo = function() {};
    window.onload = foo;
    // ...
})();
// foo is unreachable here (it’s undefined)

Guffa建议的修正:

该函数在创建后立即执行,而不是在解析后执行。 整个脚本块在执行任何代码之前都会被解析。 此外,解析代码并不意味着它会被执行,例如,如果IIFE在函数内部,那么在调用该函数之前它不会被执行。


这只是一个匿名函数,它在创建后立即执行。

就好像您将它分配给一个变量,并在之后使用它,只是没有变量:

var f = function () {
};
f();

在jQuery中有一个类似的结构,你可能会想到:

$(function(){
});

这是对ready发生的事件具有约束力的简短形式:

$(document).ready(function(){
});

立即调用的函数表达式(IIFE)立即调用函数。 这仅仅意味着该函数在完成定义后立即执行。

三个更常见的措辞:

// Crockford's preference - parens on the inside
(function() {
  console.log('Welcome to the Internet. Please follow me.');
}());

//The OPs example, parentheses on the outside
(function() {
  console.log('Welcome to the Internet. Please follow me.');
})();

//Using the exclamation mark operator
//https://stackoverflow.com/a/5654929/1175496
!function() {
  console.log('Welcome to the Internet. Please follow me.');
}();

如果对其返回值没有特殊要求,那么我们可以写出:

!function(){}();  // => true
~function(){}(); // => -1
+function(){}(); // => NaN
-function(){}();  // => NaN

或者,它可以是:

~(function(){})();
void function(){}();
true && function(){ /* code */ }();
15.0, function(){ /* code */ }();

你甚至可以写:

new function(){ /* code */ }
31.new function(){ /* code */ }() //If no parameters, the last () is not required
链接地址: http://www.djcxy.com/p/51675.html

上一篇: What is the (function() { } )() construct in JavaScript?

下一篇: Safety of global vs local variables?