我有以下代码片段.
function addLinks () {
for (var i=0, link; i<5; i++) {
link = document.createElement("a");
link.innerHTML = "Link " + i;
link.onclick = function () {
alert(i);
};
document.body.appendChild(link);
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码用于生成5个链接,并使用alert事件绑定每个链接以显示当前链接ID.但它不起作用.当您单击生成的链接时,他们都会说"链接5".
但是以下代码片段可以满足我们的期望.
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);
document.body.appendChild(link);
}
}
Run Code Online (Sandbox Code Playgroud)
以上两个片段均引自此处.正如作者的解释,似乎关闭使魔术.
但它是如何工作的以及闭包如何使其工作都超出了我的理解范围.为什么第一个不工作而第二个工作?任何人都可以详细解释这个魔法吗?
谢谢.
我在es-discuss邮件列表中遇到了以下代码:
Array.apply(null, { length: 5 }).map(Number.call, Number);
Run Code Online (Sandbox Code Playgroud)
这产生了
[0, 1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
为什么这是代码的结果?这里发生了什么事?
请有人帮忙。我正在尝试在 javascript 中创建一个基本按钮,当单击它时,它会从我的数组中随机选取一个值并将其显示在屏幕上,每次单击该按钮时,它都应该从数组中选取一个新项目。我知道如何写数组
var myarray = new Array("item1", "item2", "item3");
Run Code Online (Sandbox Code Playgroud)
我只是不知道如何做按钮部分。任何帮助都会很棒。我知道在 jQuery 中执行此操作可能更容易,但我真的很想在处理 jQuery 之前先了解一下 javascript(请保持温和,我是这个哈哈的新手)