Javascript 与ECMAScript语言规范函数调用部分混淆
我正在阅读ECMAScript语言规范 有人能为我重新措辞或详细解释以下句子吗 生产调用表达式: MemberExpression参数为 评价如下:Javascript 与ECMAScript语言规范函数调用部分混淆,javascript,ecma262,Javascript,Ecma262,我正在阅读ECMAScript语言规范 有人能为我重新措辞或详细解释以下句子吗 生产调用表达式: MemberExpression参数为 评价如下: 计算成员表达式 让我们以这段代码为例 var john = { name: 'John', greet: function(person) { alert("Hi " + person + ", my name is " + this.name); } }; john.greet("Mark"); 以上面的代码为
var john = {
name: 'John',
greet: function(person) {
alert("Hi " + person + ", my name is " + this.name);
}
};
john.greet("Mark");
以上面的代码为例,生产CallExpression是什么意思?约翰,在这种情况下是什么意思
谢谢 成员表达式是
john.greet
。基本上它的意思是:第1步:找出要调用的函数。:-)john
部分很重要,因为它是稍后才出现的
以下是最新规范的完整引用(您的链接是到第三版,该版本已被取代;但变化不大):
a。如果IsPropertyReference(ref)为true,则
一,。将此值设为GetBase(ref)。
b。否则,ref的基础是环境记录
一,。让thisValue成为调用GetBase(ref)的隐式thisValue具体方法的结果
a。让这个值未定义
john
在6(a)处再次进入,因为表达式是一个属性引用,因此this
值是john
(而不是全局对象,如果您不是通过属性引用调用它,则会是这样)
如果您正在阅读规范,我建议您阅读,而不是旧的(还没有HTML版本)。不过,恐怕这篇散文也同样浮夸。:-) 事实上,尝试实际阅读ECMA262规范对您的健康不利。即使对于语言律师来说,这也是令人讨厌的东西。在这种情况下,诀窍在于“评估”并不完全意味着普通程序员可能想象的结果;结果不是一个简单的值,而是仍然包含对MemberExpression
john
的引用的值,允许this
魔法发挥作用。@bobince:Yeah.:-)好消息是,据我所知,现在第5版已经发布,团队希望改变他们对这些东西的规范,使其更易于访问。对此我说:什么,破坏了我们所有的乐趣?谢谢!一点也不好玩,就像看法律文件一样:(@Ding:是的,但没有笑声.)