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

一道JavaScript面试题

一道JavaScript面试题

慕森卡 2019-03-13 13:15:07
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,

下面同理


查看完整回答
反对 回复 2019-03-22
?
慕田峪9158850

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

第一个underfined,因为index只声明但是未赋值。
后面b继承了a的fn方法。此时、index的值被fn函数赋值为val.也就是0。
所以后面三个都是打印0.

查看完整回答
反对 回复 2019-03-22
?
慕的地10843

TA贡献1785条经验 获得超8个赞

var b = a(0)为underfined是因为只给val赋值了,并没有给index赋值,所以console.log(index)未定义,剩下的三个是因为name为1、2、3,但是index却赋值为0,所以与name为多少无关,都会打印出0


查看完整回答
反对 回复 2019-03-22
  • 3 回答
  • 0 关注
  • 428 浏览
慕课专栏
更多

添加回答

举报

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