1.
var obj = {
name: 'baidu',
arr: ['a', 'b', 'c']
}
var obj2 = obj;
var arr = obj.arr;
obj2.arr = ['a', 'b', 'c', 'd'];
obj2.name = 'inke';
console.log(arr);
console.log(obj.name);
console.log(obj === obj2);
console.log(obj.arr === obj2.arr);
console.log(obj.arr === arr);
题解:
console.log(arr); // ['a', 'b', 'c'] 原因: js单线程
console.log(obj.name); // inke 原因: 浅拷贝
console.log(obj === obj2); // true 原因: 浅拷贝
console.log(obj.arr === obj2.arr); // true 原因: 浅拷贝
console.log(obj.arr === arr); // false 原因: 浅拷贝
2.
var MAP = {
onclick: function () {
},
curry: function (val) {
return function (z) {
return val++ + z
}
}
}
var getInfo = function (val) {
return MAP[val]
}
var fn = getInfo('curry')
var a = fn(100)
console.log(a(200))
console.log(a(300))
console.log(fn(100)(200))
console.log(getInfo('curry')(100)(300))
题解
console.log(a(200)) // 300
console.log(a(300)) // 401
console.log(fn(100)(200)) // 300
console.log(getInfo('curry')(100)(300)) // 400
重点: 1. 闭包 2. val++的执行
例如:a++ 和 ++a
var b = a++; // 先把a的值赋值给b,a在自+1
var b = ++a; // a先自+1,再赋值给b