0

这篇文章提到,执行上下文的创建具体来说包括:创建阶段和执行阶段,而创建阶段又包括:this绑定、词法环境、变量环境。但是我去找了原文,发现和译文是有出入的。原文发表在Medium上,需要翻墙,所以我这里提供截图:

图片描述

图片描述

很明显,原文讲解创建阶段的时候,只提到词法环境和变量环境,并没有this绑定,而this绑定根据第二张图作者的说法,实际上是包括在词法环境中。(词法环境包括:环境记录、外部环境引用、this绑定)。
所以想问一下,为什么原文和译文会存在出入?以及,this到底是在哪个阶段创建的?

Chor 1k
2019-04-08 提问
4 个回答
1

在原文下方,你会看到几个有趣的评论:

Hi, this is a good article, I like it.
I have translated it to Chinese and posted to my blog.
Here is my blog link: https://github.com/RicoLiu/au...
-- @Rico Liu at Sep 13, 2018
The way the content of this article is structured is (almost) same as the older (and original) article from
http://davidshariff.com/blog/...
Though of-course in your own words with more verbosity (getting into the super nitty gritty details) which IMHO isn’t required. More importantly this article doesn’t add any real value than the one by David Shariff with the exception of some explanation about how let and const binding in lexical scope (thumbs up for this).
If true, I would urge you to at-least, provide attribution to the article from David Shariff. This would only enhance your trustfulness among readers like us.
Thanks
-- @Appu Uno at Apr 6, 2019
in this article written by Dmitry Soshnikov
show the structure of the execution context is:
ThisBinding , VariableEnvironment and LexicalEnvironment
i dont know why in ur article it becomes only VariableEnvironment and LexicalEnvironment . and ThisBinding belongt to the LexicalEnvironment
thanks
--@Lee Shu at Mar 6, 2019

很显然发表在 Medium 上的这篇文章借鉴了一些前辈的文章,但是译文中出现的内容

ExecutionContextES5 = {
  ThisBinding: <this value>,
  VariableEnvironment: { ... },
  LexicalEnvironment: { ... },
}

目前而言却是第三个评论中提到的文章中才有的。

第一个评论中的译文已经有了 ThisBinding = <this value>, 这个东西,那么也许是 M 上的原文后来重新编辑过,这个就不清楚了。

1

去github咨询了最早的译者,去知乎咨询了贺师俊老师,最后找到了问题的答案,看这里底下的评论:
https://github.com/RicoLiu/au...
其实是ES标准的问题,两篇译文翻译的是原文最早的版本,同时也是ES5中的规范,但是原作者后来根据ES6规范进行了修改,而大部分转载或者翻译的文章并没有改过来。顺便我也谷歌了相关的文章,发现变量对象、词法环境分别是ES3和ES5中很相近的两个概念。所以了解不同版本ES的区别很重要。

0

this对象是在运行时基于函数的执行环境绑定的:在全局环境中,this等于window,而当函数被作为某个对象的方法调用时,this等于那个对象。不过,匿名函数的执行环境具有全局性,因此其this对象通常指向window。------《Javascript高级程序设计》

0

this是在调用前依据上下文环境,绑定到“最近的”对象的,
所以this稍微不注意会造成混乱。
不同的环境,this指代不同,全局环境下,浏览器里一般是绑定到window对象,非浏览器环境则有不同的实现,比如nodejs下的Global对象。

撰写答案

推广链接