无需自调用函数即可完成的javascript代码
下面的代码可以正常工作。我想要做的是做同样的事情,但没有任何自调用函数无需自调用函数即可完成的javascript代码,javascript,Javascript,下面的代码可以正常工作。我想要做的是做同样的事情,但没有任何自调用函数 <html> <body> <input type='button' value='click' onclick="addLinks()"> </body> </html> <script type="text/javascript"> function addLinks () { for (var i=0, link; i<5; i++)
<html>
<body>
<input type='button' value='click' onclick="addLinks()">
</body>
</html>
<script type="text/javascript">
function addLinks ()
{
for (var i=0, link; i<5; i++)
{
link = document.createElement("a");
link.innerHTML = "Link " + i;
link.onclick = (function (x) //self invoking function
{
return function()
{
alert(x);
};
})(i);
document.body.appendChild(link); } }
</script>
函数addLinks()
{
对于(var i=0,link;i您可以通过将其拆分来避免创建一次性IILife:
function addLinks() {
for (var i = 0, link; i < 5; i++) {
link = document.createElement("a");
link.innerHTML = "Link " + i;
link.onclick = buildHandler(i);
document.body.appendChild(link);
}
function buildHandler(x) {
return function() {
alert(x);
};
}
}
旁注:我主张使用addEventListener
(AttacheEvent
,而不是onclick
,作为一般做法。例如,对于最后一个示例:
link.addEventListener("click", handler.bind(link, i), false);
我可以想出至少三种不同的方法,但没有一种比IIFE更好。你的东西有什么问题?我的东西没有什么问题。我只想在没有自调用函数的情况下完成它。这就是任务!顺便说一下,阅读我的代码。我用过IIFE。我不想用它!如果ind你知道,内定没有完全搞糟。@kingshukbasak:“顺便说一句,读一下我的代码”1.这读起来相当粗鲁。我肯定你不是那个意思。2.你怎么会认为昆汀,一个真正有用的人,没有读过它?
function addLinks() {
for (var i = 0, link; i < 5; i++) {
link = document.createElement("a");
link.innerHTML = "Link " + i;
link.__x__ = i;
link.onclick = handler;
document.body.appendChild(link);
}
function handler() {
alert(this.__x__);
}
}
function addLinks() {
for (var i = 0, link; i < 5; i++) {
link = document.createElement("a");
link.innerHTML = "Link " + i;
link.onclick = handler.bind(link, i);
document.body.appendChild(link);
}
function handler(x) {
alert(x);
}
}
link.addEventListener("click", handler.bind(link, i), false);