Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用立即调用的函数表达式,与window.onload有什么区别?_Javascript - Fatal编程技术网

Javascript 如何使用立即调用的函数表达式,与window.onload有什么区别?

Javascript 如何使用立即调用的函数表达式,与window.onload有什么区别?,javascript,Javascript,我最近偶然发现了生命,对它们的目的很感兴趣。我知道它们被用来自动调用函数,这样就不需要创建函数并在窗口加载时调用它。但是,如何正确使用它们呢?例如: window.addEventListener("load", function(){ console.log("hello"); }) 做与此相同的事情: ( function(){ console.log("Hello"); }(); ) 那么什么时候应该使用生命?作为补充问题。这两者之间的区别是什么

我最近偶然发现了生命,对它们的目的很感兴趣。我知道它们被用来自动调用函数,这样就不需要创建函数并在窗口加载时调用它。但是,如何正确使用它们呢?例如:

window.addEventListener("load", function(){
    console.log("hello");
})
做与此相同的事情:

(
    function(){
        console.log("Hello");
    }();
)

那么什么时候应该使用生命?作为补充问题。这两者之间的区别是什么?

IIFE通常用于创建局部范围,这样就可以在不创建全局变量的情况下使用变量(或者在循环中使用,这样就不会在下一次迭代中覆盖变量)


一个生命马上就要开始了。加载事件触发时(在加载文档及其依赖项之后)会涉及加载处理程序。

IIFEs通常用于创建局部范围,以便在不创建全局变量的情况下使用变量(或在循环中使用变量,以便在下一次迭代中不会覆盖变量)


一个生命马上就要开始了。加载事件触发时(在加载文档及其依赖项之后)会涉及加载处理程序。

立即调用的函数表达式会立即运行

事件侦听器或事件处理程序很可能不会

var foo=“旧值”;
(功能(){
console.log(“更新值”);
foo=“变量已更新”;
})();

console.log(foo);//“变量已更新”调用的函数表达式立即运行

事件侦听器或事件处理程序很可能不会

var foo=“旧值”;
(功能(){
console.log(“更新值”);
foo=“变量已更新”;
})();

console.log(foo);//“变量已更新”
IIFEs和
window.onload
是两个完全不同的东西。它们之间没有任何关系。也许如果你把脚本标记放在正文的底部,它们可能会同时执行,但只是因为我很好奇,你从哪里发现它们的行为是相同的?@4castle只是在浏览器中运行这两个脚本。实际上,你的第二个代码片段是一个语法错误。分号必须放在外圆括号后面。IIFEs和
window.onload是两个完全不同的东西。它们之间没有任何关系。也许如果你把脚本标记放在正文的底部,它们可能会同时执行,但只是因为我很好奇,你从哪里发现它们的行为是相同的?@4castle只是在浏览器中运行这两个脚本。实际上,你的第二个代码片段是一个语法错误。分号需要放在外括号后面。