2021.6.24 (箭头函数-运算符-引用类型)

179 阅读1分钟

一、写出打印结果,并分析原因

var a = 10
var obj = {
    a: 100,
    pro: {
        getPro: () => {
            console.log(this)
        }
    }
}
obj.pro.getPro()
// 解析:首先执行obj.pro.getPro 获得箭头函数,由于箭头函数中的this由外层作用域决定
// 外层作用域逐级向上查找到,this指向window,因此打印 10

二、写出打印结果,并分析原因

var a = { n: 1 }
var b = a
a.x = a = { n: 2 }
console.log(a.x)
console.log(b.x)
// 解析:执行第1、2行后变量的指向如图一。
// 当执行第3行时,由于.运算符的优先级高于 = 赋值运算符,
// 因此优先执行a.x,执行后a指向的对象中添加了属性x, 值为undefined
// 之后进行赋值运算,执行的顺序是从右向左, a = { n: 2 } 改变了a 的指向
// 在执行a.x 赋值时,可以将它理解为b.x, 因为之前a、b 指向同一个对象。
// 现在a 的指向变了,但b的指向没变,因此相当于给b.x 赋值
// 总结:分别打印undefined 、{n: 2}

图例加深理解:

image.png