function test(){
var a = b = 3;
}
test();
console.log(typeof a == 'undefined');
console.log(typeof b == 'undefined');
打印结果:
true
false
注: 如果只打印a,则结果为: Uncaught ReferenceError: a is not defined
也就是说打印出来的是未赋值,因为 赋值从右向左,只有b被赋值了,a没有。即:
b = 3;
var a = b;
语句 var a = b = 3; 是语句 b = 3; 和 var a = b;的简写, b 最终成为了一个全局变量(因为它没有前缀 var 关键字),因此仍然在范围内甚至封闭函数之外。
function t(){
var a=b=c=d=5;
console.log(a);
};
t();
console.log(typeof a);
console.log(typeof b);
console.log(typeof c);
console.log(typeof d);
console.log(b);
console.log(c);
console.log(d);
console.log(a);
打印结果:
可以将函数内的变量解析为:
其中只有a被声明了,b,c和d都是自动解析为全局变量了.
d=5; c=5; b=5; var a=5; 也就是赋值从右向左,b,c,d都是全局变量,a是局部变量。
第一个打印出来的5,打印出的5是局部变量内的5. 函数外打印a却报错,因为a是局部变量。
a = 0;
function t(){
var a=b=c=d=5;
console.log(a);
};
t();
console.log(typeof a);
console.log(typeof b);
console.log(typeof c);
console.log(typeof d);
console.log(b);
console.log(c);
console.log(d);
console.log(a);
打印结果:
解析:
第一个打印出来的a是局部变量,值为5,最后一个打印出来的a是0,是函数外部的全局变量a,值为0。
a = 0;
function t(){
a=b=c=d=5;
console.log(a);
};
t();
console.log(typeof a);
console.log(typeof b);
console.log(typeof c);
console.log(typeof d);
console.log(b);
console.log(c);
console.log(d);
console.log(a);
打印结果:
解析:
函数内部可以解析为:d=5; c=5; b=5; a=5; 全部都解析为了全局变量,并且函数内部的a=5把函数外部的a=0覆盖了,因此第一次和第二次打印的a都是5.
console.log(1===true);
console.log(1==true);
打印结果:
解析:第一个false,因为 === 是全等,即类型和数值都要相等。