前置知识 :

  1. js的运算符优先级和关联性

1b2c2138f238b7ebdb2e435a6fe7b51f.png
赋值运算符(assignment operator)基于右值(right operand)的值,给左值(left operand)赋值。

所有的运算符优先级看MDN官方文档

运算符优先级​developer.mozilla.org
9b72d633f455e5ef5d13dc40a6c7c8f1.png

连续(链式)赋值运算符 即

var a = b = c;

实际上相当于

var a = (b = c);

分析一下这行代码 :

  1. js引擎先去作用域链找b这个变量, 如果找到则使用这个b , 如果找不到则抛错(严格模式下) 或者在window作用域下创建一个全局变量b(非严格模式) , b = c 其实是一个 赋值表达式 , 它是有返回值的 , 返回的就是c本身;

注意 : 如果使用声明关键字(let , var , const)则不是一个赋值表达式 , 因为声明关键字不能出现在圆括号等表达式中 , 只能出现在块作用域顶层和函数作用域顶层;

2. 将(b = c)表达式的返回值给a的右侧, 即(不完全是)相当于var a = c ;

OK , 到这里前置基础知识讲解完了 , 接下来是进阶知识

当连续赋值运算符出现在引用数据类型时会怎样 ?

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐