gpt4 book ai didi

javascript - 与 ECMAScript 语言规范函数调用部分混淆

转载 作者:行者123 更新时间:2023-11-30 18:54:18 24 4
gpt4 key购买 nike

我正在阅读 ECMAScript 语言规范 Function Calls section

有人可以为我改写或详细解释以下句子吗?

The production CallExpression : MemberExpression Arguments is evaluated as follows:

  1. Evaluate MemberExpression.

我们以这段代码为例。

var john = { 
name: 'John',
greet: function(person) {
alert("Hi " + person + ", my name is " + this.name);
}
};

john.greet("Mark");

以上面的代码为例,production CallExpression是什么意思?在这种情况下,MemberExpression 是什么,john.greet?

谢谢!

最佳答案

MemberExpression 是 john.greet。基本上它的意思是:第 1 步:找出要调用的函数。 :-) john 部分很重要,因为它稍后会出现。

这是最新规范的完整引述(您的链接是指向第 3 版,已被 5th edition 取代;不过变化不大):

  1. Let ref be the result of evaluating MemberExpression.
  2. Let func be GetValue(ref).
  3. Let argList be the result of evaluating Arguments, producing an internal list of argument values (see 11.2.4).
  4. If Type(func) is not Object, throw a TypeError exception.
  5. If IsCallable(func) is false, throw a TypeError exception.
  6. If Type(ref) is Reference, then
      a. If IsPropertyReference(ref) is true, then
        i. Let thisValue be GetBase(ref).
      b. Else, the base of ref is an Environment Record
        i. Let thisValue be the result of calling the ImplicitThisValue concrete method of GetBase(ref).
  7. Else, Type(ref) is not Reference.
      a. Let thisValue be undefined.
  8. Return the result of calling the [[Call]] internal method on func, providing thisValue as the this value and providing the list argList as the argument values.

如您所见,john 在 6(a) 处再次出现,因为表达式是属性引用,所以 this 的值为 john(而不是全局对象,如果您不是通过属性引用调用它)。

如果您正在阅读规范,我建议您阅读 newest one而不是旧版本(还没有 HTML 版本)。不过,恐怕散文也同样浮夸。 :-)

关于javascript - 与 ECMAScript 语言规范函数调用部分混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2738736/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com