var a=[1,2,3,45];
var b=[1,2,3,45];
console.log(a==b);//flase
console.log(a[1]==b[1]);//true
a.push(6);
console.log(a,b);//[ 1, 2, 3, 45, 6 ] [ 1, 2, 3, 45 ]
1.a与b都是数组,两个等号比较的是值相等,故第三行为false。
var c=[1,2,3];
var d=c;
console.log(c==d);//true
console.log(c===d);//true
c.push(4);
console.log(c,d);//[ 1, 2, 3, 4 ] [ 1, 2, 3, 4 ]
2.c直接将自己的指针赋给了d ,因此c与d完全相等,故两个都为true。
3.将一个相等的东西赋给两个变量与将一个变量赋给另一个变量是不同的,上一个的意思是开辟两个内容相同的空间,但两个空间的指针不同,分别赋给两个变量,这两个变量之间互不影响,而后一个的意思是将指向c的指针赋给d,也就是说两个变量共享同一个空间,一旦改变,两者都会改变。
function Foo() {
var i = 0;
return function() {
console.log(i++);
}
}
var f1 = Foo(),
f2 = Foo();
f1();//0
f1();//1
f2();//0
下面这道题为这题的变形
var i=0;
function Foo() {
return function() {
console.log(i++);
}
}
var f1 = Foo(),
f2 = Foo();
f1();//0
f1();//1
f2();//2
f2();//3
f1(); //4
console.log(i);//5
4.这题发生了变量泄露,每一次运行的时候都对i进行了重新赋值。