前几天在搜索面试问题的时候发现了这样一段代码。行刑后,我感觉和我想象的完全不一样
var a={ n : 1 };var b=a;a . x=a={ n : 2 };console . log(a . x);console . log(b . x);输出结果是:
不明确的
[对象对象]
一开始我以为语句应该先把{n : 2}赋给A,再把{n3360 2}赋给A.X
但事实并非如此,所以我更改了代码并添加了一些日志
var测试;var a={ get test () { console.log('调用一个get ');返回测试;},set test (value) { console.log('调用一个set ');测试=值;} } var test2var b={ get test2(){ console . log(' call b get ');返回测试2;},set test2(值){ console.log('调用b set ');test2=值;} } a.test={ n : 1 }b . test 2=a . test;console . log(' begin ');a . test . x=a . test={ n : 2 };这样,在begin之后,就可以一目了然这个作业实际执行了什么。
这是执行语句时打印的日志
Get被触发一次,然后set被触发一次。
我猜这个语句的执行顺序是:先取出左边的变量,然后执行赋值(在执行这个语句之前,先取出对象引用,然后从右向左执行赋值)
以上就是本文的全部内容,希望大家都能喜欢