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?