Javascript奇怪的加载序列

Wat*_*lla 14 javascript

在下面的代码中,我希望看到以下序列

1, 2, loaded 
Run Code Online (Sandbox Code Playgroud)

但我明白了

1, loaded, 2
Run Code Online (Sandbox Code Playgroud)

为什么?

<html>
<script>
window.onload = function()
{
    alert('loaded');
}

(function ()
{
    alert('1');
}());

(function ()
{
    alert('2');
}());

</script>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

dfs*_*fsq 18

你;在窗口onload函数表达后忘了.所以它变成:

window.onload = function () {
    console.log('loaded');
}(function() { console.log('1'); }())
Run Code Online (Sandbox Code Playgroud)

因此,onload函数立即执行一个参数,这是另一个IEFE的结果.于是

function() { console.log('1'); }()
Run Code Online (Sandbox Code Playgroud)

首先执行,然后立即执行该window.onload函数表达式.然后console.log('2')表达.

很好的例子,为什么重要的是不要忘记行尾的分号.

  • 我还补充说,出于同样的原因,许多库,插件等想要防弹并且由他们自己完成***立即调用函数表达式***`(function(){}());`它们有一个`;`作为前缀,如:`;(function(){}());`以防止被邋code的代码破坏. (3认同)