.jpg)
2020-05-12 增

var obj= {
name:'小可爱',
fn:(function(x){
return x +10
})(obj.name)
}
console.log(obj.fn) //TypeError: Cannot read property 'name' of undefined
就考察一个点 var xxx = xxx 是怎样操作的
- 创建值
- 开辟一个堆 AAAFFF0000
- 存储键值对
- name:'小可爱'
- fn:自执行函数执行,需要把obj.name的值当做实参传递进来,此时还没有obj呢 相当于 undefind.name
- 创建变量
- 关联在一起
# 题
# 1.
/*百度面试题*/
let a = 12;
let b = a;
b = 13;
console.log(a);
let a = {n:12};
let b = a;
b['n'] = 13;
console.log(a.n);
let a = {n:12};
let b = a;
b = {n:13};
console.log(a.n);

# 2. 解释的有问题 见最后
let a = {
n: 10
};
let b = a;
b.m = b = {
n: 20
};
console.log(a); //{n: 10, m: {n: 20}}
console.log(b); //{n: 20}

# 3.
let x = [12, 23];
function fn(y) {
y[0] = 100;
y = [100];
y[1] = 200;
console.log(y);
}
fn(x);
console.log(x);
// [100, 200] [100, 23]
延伸 执行函数的过程
- 初始化实参集合 arguements 是一个类数组
- 创建形参变量并且赋值
- 执行代码 在非严格模式下,实参和形参会建立一个映射机制,严格模式下不会,而且es6箭头函数中没有arguements实参集合
function fn(x,y){
//非严格模式
/*arguements = {0:10,1:20}
x = 10
y = 20
*/
console.log(x,y,arguments) // 10 20 Arguements(2)[10,20]
arguements[0]=100
y=200
console.log(x,y,arguments) // 100 200 Arguements(2)[100,200]
"use strict"
console.log(x,y,arguments) // 10 20 Arguements(2)[10,20]
arguements[0]=100
y=200
console.log(x,y,arguments) // 10 200 Arguements(2)[100,20]
}
fn(10,20)
# 4.

# 5.

# 第二道的解释有问题
a.x = a = {n: 2};
a.x // --> undefined
b.x // --> {n: 2}
# 运算符的优先级
赋值运算顺序是从右往左的,不过由于“.”是优先级最高的运算符,所以这行代码先“计算”了a.x; 