// 普通模式下,形参和arguments是相互关联(相互追踪)
var x = 1
function fn(x){
x = 2
console.log(arguments[0])//2
arguments[0] = 3
console.log(x)//3
}
fn(x)
console.log(x)//1
// var arr = [function(){console.log(this)},'123','345']
// arr[0]() this指向arr
var length = 2;
function fn() {
console.log(this.length);
}
var obj = {
length: 5,
method: function (fn) {
fn();
arguments[0]();//this指向arr,自己本身有一个length属性,所以打印1
}
};
obj.method(fn)
题目
var foo = { n: 1 };
(function (foo) {
console.log(foo.n);
foo.n = 3;
var foo = { n: 2 };
console.log(foo.n);
})(foo);
console.log(foo.n);
var foo = { n: 1 };//0x100
(function (foo) {//这个形参的地址也是0x100
var foo;//形参比变量提升的优先级高,相当于这一步被干掉
console.log(foo.n);0x100
foo.n = 3;//这里的地址又是0x100,把这个地址里的n改为3
foo = { n: 2 };//0x200,把foo指向0x200,改的是形参的指向
console.log(foo.n);
})(foo);
console.log(foo.n);//0x100