无需自调用函数即可完成的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);