EDIT: Я думаю, что это не дубликат; это скрытый параметр, я хотел спросить о затенении относительно this
и лексическом охвате, прочитав this SO Q/A re. затенение.Shadowing `this` - лексическое разрешение имени
Я думал, что смысл названия 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
обходится, следовательно, лексическая область действия фактически находится в действии?
'return helper.call (this)' – elclanrs
Это не имеет никакого отношения к затенению. 'this' на самом деле просто скрытый параметр. – SLaks
Нет никакой разницы между «разрешенным типом динамически *» и «* беззвучно передан в качестве дополнительного аргумента *»? – Bergi