Hef*_*ler 5 javascript closures pointers scope var
我意识到JavaScript没有指针,但是当循环遍历包含对象的数组时,我注意到了这种"指针"行为,但是当数组包含数字时(例如),却没有注意到类似的行为.
var ARR_num = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
for (var i = 0, len = ARR_num.length; i < len; i++) {
var item = ARR_num[i];
item++;
}
console.log(ARR_num);
//Outputs [0,1,2,3,4,5,6,7,8,9]Run Code Online (Sandbox Code Playgroud)
现在有一个带对象的数组
var ARR_obj = [{}, {}, {}];
for (var i = 0, len = ARR_obj.length; i < len; i++) {
var item = ARR_obj[i];
item.pointer = true;
}
console.log(ARR_obj);
//Outputs [{pointer: true}, {pointer: true}, {pointer: true}]Run Code Online (Sandbox Code Playgroud)
为什么这两个不同的行为?
为什么会有这两种截然不同的行为?
当您将一个对象分配给另一个变量时,新变量指向相同的对象,因此当您更改新变量属性时,对象会发生变化,例如:
var a= {name: "some"};
var b = a;
b.name = "newName";
console.log(a.name);// "newName"
Run Code Online (Sandbox Code Playgroud)
当您将基本类型分配给另一个变量时,它只是一个新变量,并且没有对旧变量的引用,因此更改新变量不会影响旧变量。例子:
var a = "some";
var b = a;
b = "newName";
console.log(a);//"some"
Run Code Online (Sandbox Code Playgroud)
希望这会有所帮助!