var a = function (val, index) {console.log(index);return { fn: function (name) { return a(name, val); }}}var b = a(0); // underfinedb.fn(1); // 0b.fn(2); // 0b.fn(3); // 0
3 回答
HUX布斯
TA贡献1876条经验 获得超6个赞
闭包问题
执行了var b = a(0);,index没有传进去,所以是underfined,同时会将val赋值为0,这个val不会被回收,因为返回的对象中引用了这个参数
b = {
fn: function (name) {
return a(name, val);
}
}
执行b.fn(1);就是执行a(1,0),这里index赋值为0,所以会打印0,
下面同理
慕田峪9158850
TA贡献1794条经验 获得超7个赞
第一个underfined,因为index只声明但是未赋值。
后面b继承了a的fn方法。此时、index的值被fn函数赋值为val.也就是0。
所以后面三个都是打印0.
慕的地10843
TA贡献1785条经验 获得超8个赞
添加回答
举报
0/150
提交
取消