gpt4 book ai didi

Javascript 自执行应该工作吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:50:32 26 4
gpt4 key购买 nike

我有这段代码:

function (i)
{
alert(i);
}(3);

它不起作用,所以在 StackOverFlow 问题之后 - 我将其更改为:

 (function(i){ alert(i); })(3); 

而且有效。

我必须() 包装所有代码。

但后来我在其他网站上看到这段代码:

function addLinks () {
for (var i=0, link; i<5; i++) {
link = document.createElement("a");
link.innerHTML = "Link " + i;
link.onclick = function (num) {
return function () {
alert(num);
};
}(i); // <=== What about this ? there is no () wrapper... so how does it work ?
document.body.appendChild(link);
}
}
window.onload = addLinks;

我想问一下 (i) 部分的作用是什么是否正在执行某事?

如果它可以,为什么它不是以下模式:

(function(i){ alert(i); })(3);

我的意思是哪里()的包装器?

最佳答案

编译器需要区分函数声明语句和函数定义表达式。您只能在表达式中调用函数。

当关键字 function 出现在 '=' 或 '(' 之后,编译器知道这必须是一个函数定义表达式(因为在'='或'(')之后只允许表达式而不是语句并允许您立即调用它。当关键字函数开始一个新语句,编译器假定它是一个函数声明语句,因此您不能立即调用该函数

请注意,函数声明语句要求您为函数命名。这允许您稍后调用它。您可以在函数定义表达式中省略函数名称(您可以立即调用它们)。

已编辑

所有粗体字都是由 OP 的 Royi Namir 制作的:那些粗体字是理解的关键。

this is the most logical Explanation after a lot of tests.

看这个

http://jsbin.com/imetan/edit#javascript,html

关于Javascript 自执行应该工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7979184/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com