在下面的代码中,我希望看到以下序列
1, 2, loaded
但我得到
1, loaded, 2
为什么?
<html>
<script>
window.onload = function()
{
alert('loaded');
}
(function ()
{
alert('1');
}());
(function ()
{
alert('2');
}());
</script>
<body>
</body>
</html>
答案 0 :(得分:18)
您在窗口;
函数表达式后忘记了onload
。所以它变成了:
window.onload = function () {
console.log('loaded');
}(function() { console.log('1'); }())
所以onload
函数立即执行一个参数,这是另一个IEFE的结果。因此
function() { console.log('1'); }()
首先执行,然后立即执行window.onload
函数表达式。然后console.log('2')
表达。
很好的例子,为什么重要的是不要忘记行末的分号。