【发布时间】:2016-03-10 20:53:55
【问题描述】:
编辑:我认为这不是重复的;它是一个隐藏参数,我想询问与this 相关的阴影和词法范围,已阅读this SO Q/A re。阴影。
我曾认为this 名称的含义可能会被动态解析(就范围而言),以解释为什么在我看来它没有被词法解析:
function foo() {return this;}
var a = {f: foo};
var b = {f: foo};
a.f() !== b.f();
a.f() !== foo();
a.f() !== window; //not strict mode
但后来我读到每个函数都会默默地接收this 作为附加参数。 (我意识到箭头功能是不同的。)
显然helper() 并没有像我们希望的那样工作:
ob = {
meth: function(){
var helper = function() {return this;};
return helper();
}
};
ob.meth(); //Window or undefined
据我了解,不是this 通过查看封闭范围(结果为ob)来解决,而是解释器调用helper() 并将this 设置为undefined(严格模式),作为参数静默传递。
那么周围作用域的this 是否实际上是shadowed,因此词法作用域实际上在起作用?
【问题讨论】:
-
return helper.call(this) -
这与阴影无关。
this实际上只是一个隐藏参数。 -
“动态解析”和“作为附加参数静默传递”之间没有区别吗?
-
@Bergi 我编辑使第一句话更清晰
标签: javascript this