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

js闭包问题

js闭包问题

Hall0W0rld 2017-08-30 22:08:39
题目1var name = "The Window";  var object = {    name : "My Object",    getNameFunc : function(){      return function(){        return this.name;      };    }  };  alert(object.getNameFunc()());答案:The Window题目2var name = "The Window";  var object = {    name : "My Object",    getNameFunc : function(){      var that = this;      return function(){        return that.name;      };    }  };  alert(object.getNameFunc()());答案:My Object解释下
查看完整描述

3 回答

?
_名字很奇怪3801458

TA贡献3条经验 获得超2个赞

只可意会不可言传^_^

查看完整回答
2 反对 回复 2017-08-31
?
_游戏人生_

TA贡献31条经验 获得超92个赞

匿名函数的执行环境具有全局性,因此其this对象通常指向window(call()、apply()除外);

每个函数在被调用时都会自动取得两个特殊变量:this和arguments。内部函数在搜索这两个变量时,只会搜索到其活动对象为止(找到自己的this和arguments,就停止),因此永远不可能直接访问外部函数中的this和arguments。

在定义匿名函数之前,把this对象复制给that变量。此时定义闭包,闭包可以访问到that,即外部函数的this。

                                                                  ——取自《高程3》182页

查看完整回答
2 反对 回复 2017-08-30
?
橋本奈奈未

TA贡献436条经验 获得超108个赞

如果你想对闭包有一个清晰并且深入的认知,建议阅读《你不知道的javascript》上卷,非常不错的一本书

查看完整回答
1 反对 回复 2017-08-31
?
RuthlessPotato丶

TA贡献19条经验 获得超9个赞

第一个,打印object 的属性getnameFunc,这个属性是个函数,是函数,是函数,注意,它只有返回值,函数里面没有变量,没有对象,没有属性,只有返回值,只是函数,函数是全局调用的,全局调用的,执行这个this 就是指向全局。第二个,不是函数了,不是函数了,他声明了变量that ,有了变量有属性,就产生了闭包,有作用域,要读这个that,指向这个对象了。个人理解,哈哈

查看完整回答
1 反对 回复 2017-08-31
  • 3 回答
  • 0 关注
  • 2624 浏览
慕课专栏
更多

添加回答

举报

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