gpt4 book ai didi

Javascript 引用与绑定(bind)……有什么区别?

转载 作者:可可西里 更新时间:2023-11-01 02:18:03 24 4
gpt4 key购买 nike

我最近在 Kyle Simpson 的《你不知道的 JS:ES6》中阅读了以下内容

[ES6 模块导出] 实际绑定(bind)(几乎像指针)到内部模块定义中的标识符。”

我的困惑是这些绑定(bind)与引用有何不同...

我明白 JS 中的 reference 只适用于非原始类型(比如对象),所以给定

let object1 = {a: 1};
let object2 = object1;

object1object2 现在引用(它们都是引用)同一个对象。
如果我向 object2 添加一个属性,我也会向 object1

添加一个属性
object2.b = 2;
console.log(object1.b); // 2

而且我可以看到绑定(bind)可以应用于原始类型和非原始类型

// 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

除了原始值也可以共享一个绑定(bind)(而引用仅限于非原始类型)之外,绑定(bind)是否就像引用一样?

我觉得我在这里错过了什么......

最佳答案

A binding是“名称指的是什么”的非常通用的术语。作用域中的每个标识符都绑定(bind)到某物。通常它们解析为变量环境中的变量(environment record 中的存储槽),但也有异常(exception)(例如 with 或全局对象)。

A reference是指向某种结构的指针的术语。例如,对象被称为“reference values”,因为它们引用具有标识的可变属性的容器。

ES6 模块现在引入了一种新的绑定(bind)类型,一种以前不为人知的类型。它不是一个普通的变量,而是字面上对另一个变量的引用——从另一个模块导出的变量。如果模块变量发生变化,这将通过导入反射(reflect)出来——它们都指向同一个环境记录槽。
export 声明添加了从本地名称到 module interface 中的名称的映射。 ,而 import 声明添加了从相应模块接口(interface)中的名称到本地名称的映射。当一个模块被实例化时,一个 indirect binding is created指向与导出模块中的本地绑定(bind)相同的环境。

关于Javascript 引用与绑定(bind)……有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39259729/

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