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());



小熊熊HELLO
浏览 978回答 1
1回答

qq_药药_0

object.getNameFunc()执行后返回一个匿名函数:function() {     return name; };这段代码可以简化为var name='The window'; console.log((function () {     return name })())匿名函数并没有绑定到任何一个对象中。你可以简单的理解为,普通函数执行,通过作用域链访问到了全局变量值。因为你这里也没有this,也不存在this指向问题;
打开App,查看更多内容
随时随地看视频慕课网APP