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 回答
qq_药药_0
TA贡献52条经验 获得超27个赞
object.getNameFunc()执行后返回一个匿名函数:
function() { return name; };
这段代码可以简化为
var name='The window'; console.log((function () { return name })())
匿名函数并没有绑定到任何一个对象中。你可以简单的理解为,普通函数执行,通过作用域链访问到了全局变量值。因为你这里也没有this,也不存在this指向问题;
添加回答
举报
0/150
提交
取消