Я обнаружил, что это ключевое слово «this» всегда указывает на global
на использование функции стрелки внутри вложенного объектного литерала.Почему не происходит «это» функции стрелки внутри вложенного объектного литерала?
Согласно другим вопросам, следующий фрагмент может быть объяснен как функция «стрелка», указанная в лексическом контексте.
var c = 100;
var a = {c:5 , fn:() => {return this.c;} };
console.log(a.c); //100
Однако, я не могу понять следующий код (вложенный объект буквального):
var c = 100;
var a = {
c: 5,
b: {
c: 10,
fn:()=> {return this.c;}
}
}
console.log(a.b.fn());// still 100, why not 5?
я имею в виду, если рассматривать с лексическим контекстом аспекта, следует не «это» в точке abfn к?
Почему, независимо от того, сколько уровней объект вложен, все экземпляры «this» указывают на окно или глобальное?
Указывает на текущий объем. Объекты не изменяют область видимости, только функции меняют область. Таким образом, 'this' внутри функции стрелки будет ссылаться на ближайшую функцию внутри. В вашем случае это только верхний уровень. – mash
@mash: 'this' и scope в значительной степени не связаны друг с другом, и' this' только редко 'относится к ... [a] функции. " Но суть комментария, конечно, правильная. –
Только для записи: функции стрелок меняют область действия, как и любую функцию. Они просто связывают слова 'this',' arguments', 'super' и' new.target' лексически, а не определяют свои собственные переменные d, которые затеняют внешние. –