JavaScript 中的 (function() { } )() 构造是什么?
2022-08-29 22:14:28
我想知道这意味着什么:
(function () {
})();
这基本上是在说吗?document.onload
我想知道这意味着什么:
(function () {
})();
这基本上是在说吗?document.onload
它是一个立即调用的函数表达式,简称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位于函数内部,那么在调用函数之前它不会被执行。
更新由于这是一个非常流行的话题,值得一提的是,IIFE也可以使用ES6的箭头函数编写(就像Gajus在评论中指出的那样):
((foo) => {
// do something with foo here foo
})('foo value')
它只是一个在创建后立即执行的匿名函数。
这就像你把它赋给一个变量,然后马上使用它,只是没有变量:
var f = function () {
};
f();
在jQuery中,您可能会想到一个类似的结构:
$(function(){
});
这是绑定事件的缩写形式:ready
$(document).ready(function(){
});
但上述两种构造不是IIFE。