该
Reference类型用于解释这种运营商的行为delete,typeof以及赋值运算符.[...]参考是一个已解析的名称绑定.允许函数调用返回引用.纯粹为了宿主对象而承认这种可能性.此规范未定义的内置ECMAScript函数返回引用,并且没有为用户定义的函数提供返回引用的规定.
最后两句话让我印象深刻.有了这个,你可以做一些事情coolHostFn() = value(有效的语法,顺便说一句).所以我的问题是:
是否有任何EcmaScript实现定义导致Reference值的主机功能对象?
我最近在Kyle Simpson的"你不了解JS:ES6"中读到了以下内容
"[ES6模块导出]实际绑定(几乎像指针)到内部模块定义中的标识符."
我的困惑是这些绑定与参考文献有何不同......
我理解JS 中的引用只适用于非原始类型(如对象),因此给定
let object1 = {a: 1};
let object2 = object1;
Run Code Online (Sandbox Code Playgroud)
object1而object2现在所说的(他们是两个参考点)同一个对象.
如果我添加一个属性object2,我也添加了一个属性object1
object2.b = 2;
console.log(object1.b); // 2
Run Code Online (Sandbox Code Playgroud)
我可以看到绑定可以应用于基本类型和非基元类型
// foo.js
export let count = 1;
export function incrementCount() { count++; }
// bar.js
import {count, incrementCount} from foo;
console.log(count); // 1
incrementCount();
console.log(count); // 2
Run Code Online (Sandbox Code Playgroud)
绑定就像引用一样,除了原始值也可以共享绑定(而引用仅限于非基本类型)?
我觉得我在这里错过了一些东西......
全部,说我们有如下代码.
var b ={};
var a=b;
b=null;
if (a==null)
{
alert('a is null');
}
Run Code Online (Sandbox Code Playgroud)
在代码运行之前,我曾认为a应该为null,因为我认为a并且b指向同一个对象或它们应该是相同的地址.但事实并非如此.javascript对象引用类型不是经典语言(c ++/c#/ java)吗?还是我错过了重要的事情?谢谢.