<div dir="ltr">> What data is of type Reference in the specification?<br><br>If you search for "value of type Reference" in the spec, I think it finds all of the places where references are created.<br><br>References come from references to variable names, or from things like property accesses like `foo.bar` or `foo['bar']` (also if the key is an expression that was evaluated). You can see here for instance <a href="https://www.ecma-international.org/ecma-262/8.0/#sec-property-accessors-runtime-semantics-evaluation">https://www.ecma-international.org/ecma-262/8.0/#sec-property-accessors-runtime-semantics-evaluation</a><br><br>> Return a value of type Reference whose base value component is bv, whose referenced name component is propertyNameString, and whose strict reference flag is strict.<br><br><br>> The specification says that: "The base value component is either undefined, an Object, a Boolean, a String, a Symbol, a Number, or an Environment Record". Almost everything is listed here. What in this case will not be the Reference type?<br><br>That list is the list of types that can be the based, not the list of types that are references. All of the standard JS types, and environment records may be the "base" of a reference.<br><br>> Yeah, difference in Base value. Can simple string such as "someString" be Base?<br><br>`"someString"` would be the Base value in both of those examples. For `storage.toString`, the value of `storage` will be evaluated first, so when the reference is created with the string value as the base. You can see that in the spec section I linked above<br><br>> 1. Let baseReference be the result of evaluating MemberExpression.<br>> 2. Let baseValue be ? GetValue(baseReference).<br><br>So `GetValue(baseReference)` will get the actual value of `storage` and then it will be used as the base string value.<br><br>> With `window.bar` what is base? <br><br>`window` would be evaluated to the `Window` object, which would be the Base value.<br><br>> And when `bar`?<br><br>This will run <a href="https://www.ecma-international.org/ecma-262/8.0/#sec-getidentifierreference">https://www.ecma-international.org/ecma-262/8.0/#sec-getidentifierreference</a> which will recurse up through the various nested environments until it either finds one with a `bar` declaration, or finds none. Assuming `window.bar` exists and you're in the global scope, it would set the global environment record as the Base for the reference.<br><br>> If this is an object environment, then why call through dot will be a window object, but not an object environment?<br><br>I'm not sure I follow here. Where would an object environment come up in that case?<br><br>> If inside of object we work with property object, the property of this object will have a Declarative Records Environment or Object Records Environment.<br><br>I'm not sure I understand what you're asking here.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Feb 17, 2018 at 6:16 PM, Maxim Vaarwel <span dir="ltr"><<a href="mailto:paloshmax@gmail.com" target="_blank">paloshmax@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I want to ask some questions about Reference in ECMAScript.<br><br><ol style="box-sizing:border-box;padding-left:2em;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:14px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><li style="box-sizing:border-box;margin-left:0px">What data is of type Reference in the specification?</li><li style="box-sizing:border-box;margin-top:0.25em;margin-left:0px">The specification says that: "The base value component is either undefined, an Object, a Boolean, a String, a Symbol, a Number, or an Environment Record". Almost everything is listed here. What in this case will not be the Reference type? And I would like to see examples of code with each base value. For example:</li></ol><pre style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:11.9px;margin-top:0px;margin-bottom:16px;word-wrap:normal;padding:16px;overflow:auto;line-height:1.45;background-color:rgb(246,248,250);border-radius:3px;color:rgb(36,41,46);font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial"><code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:11.9px;padding:0px;margin:0px;background:transparent;border-radius:3px;word-break:normal;white-space:pre-wrap;border:0px;display:inline;overflow:visible;line-height:inherit;word-wrap:normal">/// Definition variable in javascript code (example of javascript code)
var a;
/// Reference structure in engine
Reference = {
    Base: Environment Record, /// It's one of other cases
    ReferencedName: "a", 
    StrictReference: false
}</code></pre><pre style="box-sizing:border-box;margin-top:0px;margin-bottom:16px;word-wrap:normal;padding:16px;overflow:auto;line-height:1.45;background-color:rgb(246,248,250);border-radius:3px;text-align:start;text-indent:0px;text-decoration-style:initial;text-decoration-color:initial"><code style="box-sizing:border-box;padding:0px;margin:0px;background:transparent;border-radius:3px;word-break:normal;border:0px;display:inline;overflow:visible;line-height:inherit;word-wrap:normal"><font color="#24292e" face="SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace"><span style="font-size:11.9px">/// Is there a difference between the two expressions?
"someString".toString; /// ƒ toString() { [native code] }
/// and
var storage = "otherString";
storage.toString; /// </span></font></code><font color="#24292e" face="SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace"><span style="font-size:11.9px">ƒ toString() { [native code] }

The question is how to calculate these expressions?
How will the Reference type fields be filled?

What how I think (maybe it's wrong, I don't know)
/// "someString".toString;
</span></font>Reference = {<font color="#24292e" face="SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace"><span style="font-size:11.9px">
</span></font>    Base: "someString",<font color="#24292e" face="SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace"><span style="font-size:11.9px">
</span></font>    ReferencedName: "toString", <font color="#24292e" face="SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace"><span style="font-size:11.9px">
</span></font>    StrictReference: false<font color="#24292e" face="SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace"><span style="font-size:11.9px">
</span></font>}
/// storage.toString;
Reference = {
    Base: storage,
    ReferencedName: "toString", 
    StrictReference: false
}
Yeah, difference in Base value. Can simple string such as "someString" be Base?</pre><ol start="3" style="font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;box-sizing:border-box;padding-left:2em;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:14px"><li style="box-sizing:border-box;margin-left:0px">In the code, in the global code there is a variable <code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:11.9px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">bar</code> (declared, <code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:11.9px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">bar</code> - example of variable). We can address to it as <code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:11.9px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">window.bar</code> or<code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:11.9px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">bar</code> ... and here the most interesting. With <code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:11.9px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">window.bar</code> what is base? And when <code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:11.9px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">bar</code>? We know that declarations in the global code are the Object Records Environment, and if so, base will be appeal to the <code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:11.9px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">bar</code> Records Environment. But appeal to the <code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:11.9px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">window.bar</code>, base will be a <code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:11.9px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">window</code> - type(Object). And here it is not clear. If this is an object environment, then why call through dot will be a window object, but not an object environment?<br></li><li style="box-sizing:border-box;margin-top:0.25em;margin-left:0px">If inside of object we work with property object, the property of this object will have a Declarative Records Environment or Object Records Environment.</li></ol>

My question is complexity. But type Reference is too hard for understanding without additional explanation.</div>
<br>______________________________<wbr>_________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/<wbr>listinfo/es-discuss</a><br>
<br></blockquote></div><br></div>