有人能用例子来解释一下这个算法是如何工作的吗?
GetValue (V)#
1. ReturnIfAbrupt(V).
2. If Type(V) is not Reference, return V.
3. Let base be GetBase(V).
4. If IsUnresolvableReference(V) is true, throw a ReferenceError exception.
5. If IsPropertyReference(V) is true, then
a. If HasPrimitiveBase(V) is true, then
i. Assert: In this case, base will never be null or undefined.
ii. Let base be ToObject(base).
b. Return ? base.[[Get]](GetReferencedName(V), GetThisValue(V)).
6. Else base must be an Environment Record,
a. Return ? base.GetBindingValue(GetReferencedName(V), IsStrictReference(V)) (see 8.1.1).
http://www.ecma-international.org/ecma-262/7.0/#sec-getvalue
如果有人能举例解释一下它的工作原理就太好了。我尝试过,但是我并没有完全理解。
以下是解释的示例:
let a = 10, b = {name: "Unknown"};
(null, a);
(null, a.name);
(null, b);
(null, b.name);
(null, b.surname);
(null, 10);
/// etc...
("" + Object.prototype)
。对于加法,也有一个算法,并且它调用每个操作数的 GetValue(V),我想考虑算法 (GetValue()) 中所有可能情况的分支。 - MaximPro(null, a)
。上述算法将如何工作?在各个点上,为什么会使用这个或那个分支。最好写出此算法的所有可能代码选项。这样更容易理解它在示例中发生了什么。 - MaximProGetValue(a)
返回一个纯结果。 - MaximProReference
时的每个场合。我认为你的问题太过宽泛。 - Bergi