如何重新定义变量name?
不是。
从左到右的分配是怎么回事? = 不是从右到左工作吗?
是的,这就是这里发生的事情。那是destructuring assignment。这一行:
const {key1: value1, key2:value2} = name
相当于这个:
const value1 = name.key1;
const value2 = name.key2;
你说得对,它看起来像一个对象被分配给一个变量,但反过来。这是故意的。当你这样做时:
const x = {a: 1, b: 2};
您正在创建一个对象(组合一个结构)并将其分配给x。当你这样做时:
const {a: vara, b: varb} = x;
您正在解构(分解结构)右侧的对象到左侧的目标(vara 和varb)。其语法是相同,只是颠倒过来。这两种形式也都有速记版本:
const a = 1;
const b = 2;
const x = {a, b};
创建一个具有a 和b 属性的对象(使用来自a 和b 范围内标识符的值)。这个;
const {a, b} = x;
从x 获取a 和b 属性,并使用它来设置常量a 和b 的值。
我应该注意到,解构与let 或const(或var)无关。就像您可以在创建对象时使用任何范围内的变量或属性来为对象属性提供值一样,在解构时也可以这样做。因为对象解构以{ 开头,如果您不在表达式中执行此操作,则需要在其前面放置一个(,这样{ 就不会看起来像一个块的开头:
const x = {a: 1, b: 2};
let a, b;
({a, b} = x);
console.log(a, b); // 1 2
const y = {};
({a: y.ayyy, b: y.beee} = x);
console.log(y); // {ayyy: 1, beee: 2}
在标有 *** 的行中引用了什么 name?最初通过的还是创建的对象?
该代码中没有创建对象。 (嗯,箭头函数是一个对象,还有像词法环境这样的幕后规范级别的对象,但是……)
不可能说出您标记的行中的 name 是什么,因为这是一个语法错误,function 关键字启动了一个从未完成的函数声明。如果function(name) 是指someFunction(name),那么它就是传递给箭头函数的name。