快捷导航

js闭包的一个问题。。。

var i = 2;function outFun() {    var i=1;    return function () {        return i;    }}console.log(outFun()());为什么上面的这段代码输出的结果是1?
var name = "The Window";var object = {    name: "My object",    getNameFunc: function() {        return function() {            return name;        };    }}console.log(object.getNameFunc()()) 这段代码,我的想法是:这个应该是个闭包,调用
object.getNameFunc()返回的结果是一个闭包函数,同时会带着包含全局变量对象和object变量对象和getNameFunc的变量对象的作用域链出来。在window中运行,生成一个window的活动对象,推到作用域链的前端。在返回name时候先查找活动对象中所以就返回了“The Window”。这是我对这段代码的理解。

我把这个思路套到上面那段代码中应该是返回2啊,为什么返回了1???
这两个函数有什么不同吗?求大佬解答。。。谢谢、


+++++++++++++++++++++++评论区里没换行的代码++++++++++++++++++++++++++
var name = "The Window";var object = {    age:18,    name: "My object",    getNameFunc: function() {        var name = "i am name";        return function() {            return name;        };    }};var nameFunc = object.getNameFunc();console.log(nameFunc.call(object));console.log(nameFunc());

免责声明:本内容仅代表回答者见解不代表本站观点,请谨慎对待。

版权声明:作者保留权利,不代表本站立场。

回复

使用道具 举报

参与会员1

object.getNameFunc()执行后返回一个匿名函数:
function(){returnname;};这段代码可以简化为
varname='Thewindow';console.log((function(){returnname})())匿名函数并没有绑定到任何一个对象中。你可以简单的理解为,普通函数执行,通过作用域链访问到了全局变量值。因为你这里也没有this,也不存在this指向问题;
回复

使用道具 举报

可能感兴趣的问答

发新帖
  • 微信访问
  • 手机APP