试验为什么不能形成闭包的形式,问题1此处的传参i为什么不能被传入,问题二这样写这个aaa函数是叠

window.onload=function(){

    var arrLi=document.getElementsByTagName("li")

    console.log(arrLi,"arrLi");

        for(var i=0;i<3;i++){

            console.log(i,"i");

            

            

            function aaa(i){----->问题1此处的传参i为什么不能被传入,问题二这样写这个aaa函数是叠加的吗,还是被后面的aaa覆盖了

            

            

                console.log(i,"aaa里面的i")

            arrLi[i].onclick=function(){

                alert(i)

            }

        }

            console.log(aaa);

    }

    

}


料青山看我应如是
浏览 400回答 1
1回答

吃鸡游戏

你这样写,有很多问题啊。你在for循环里定义了函数aaa,并没有调用函数aaa,所以,i根本没有传入到aaa中。并且你在for循环里创建函数,每轮for循环结束,该函数就无法被调用了,这里的aaa,每次产生的都是新的函数var a = {};console.log(D);&nbsp; &nbsp; &nbsp; &nbsp; // undefinedfor(var i=0;i<2;i++){&nbsp; &nbsp; function D(){&nbsp; &nbsp; &nbsp; &nbsp; console.log('0');&nbsp; &nbsp; }&nbsp; &nbsp; a[i] = D;}console.log(a[0]==a[1]);&nbsp; // false在for循环里声明的函数,每次产生都是不同的函数,我在上面,将D放入一个obj中,for循环后比较,返回false证明了这点你的代码,与下面的代码,是等价的window.onload=function(){&nbsp; &nbsp; var aaa;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// 修改的地方&nbsp; &nbsp; console.log(aaa);&nbsp; &nbsp; &nbsp; &nbsp; //undefined&nbsp; &nbsp; var arrLi=document.getElementsByTagName("li");&nbsp; &nbsp; console.log(arrLi,"arrLi");&nbsp; &nbsp; &nbsp; &nbsp; for(var i=0;i<3;i++){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; console.log(i,"i");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; aaa = function(i){&nbsp; &nbsp; // 修改的地方&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; console.log(i,"aaa里面的i")&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arrLi[i].onclick=function(){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alert(i)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; console.log(aaa);&nbsp; &nbsp; }}你在for循环里,使用function aaa(){}创建函数,其实,这里的变量aaa会被变量提升到顶部,然后在for循环里对这个aaa赋值.所以,这里是被覆盖了
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript