为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

料青山看我应如是 2018-12-27 09:14:09
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);    }    }
查看完整描述

1 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

你这样写,有很多问题啊。你在for循环里定义了函数aaa,并没有调用函数aaa,所以,i根本没有传入到aaa中。

并且你在for循环里创建函数,每轮for循环结束,该函数就无法被调用了,这里的aaa,每次产生的都是新的函数


var a = {};

console.log(D);        // undefined

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

    function D(){

        console.log('0');

    }

    a[i] = D;

}

console.log(a[0]==a[1]);  // false

在for循环里声明的函数,每次产生都是不同的函数,我在上面,将D放入一个obj中,for循环后比较,返回false证明了这点


你的代码,与下面的代码,是等价的


window.onload=function(){

    var aaa;                 // 修改的地方

    console.log(aaa);        //undefined

    var arrLi=document.getElementsByTagName("li");

    console.log(arrLi,"arrLi");

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

            console.log(i,"i");

            aaa = function(i){    // 修改的地方

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

                arrLi[i].onclick=function(){

                alert(i)

            }

        }

            console.log(aaa);

    }

}

你在for循环里,使用function aaa(){}创建函数,其实,这里的变量aaa会被变量提升到顶部,

然后在for循环里对这个aaa赋值.所以,这里是被覆盖了


查看完整回答
反对 回复 2019-01-07
  • 1 回答
  • 0 关注
  • 399 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信