声明、定义与初始化
声明宣称一个名字的存在,定义则为这个名字分配存储空间,而初始化则是为名字分配的存储空间赋初值。
var
v =
"hello"
;
(
function
(){
console.log(v);
var
v =
"world"
;
})();
相当于:
var
v =
"hello"
;
(
function
(){
var
v;
//declaration hoisting
console.log(v);
v =
"world"
;
})();
上面两段代码运行的结果一样
答案是:undefined
答案是:undefined
var
v =
"hello"
;
(
function
(){
var
v =
"world"
;
console.log(v);
})();
答案是:world
if(!("a" in window)){ //("a" in window) 等价于声明一个a变量:为真
var a=10;
}
alert(a);
var a=10;
}
alert(a);
答案是:undefined
if ('a' in window) {
var a = '1';
}
alert(a)
var a = '1';
}
alert(a)
var a;
if ('a' in window) {
a = '1';
}
if ('a' in window) {
a = '1';
}
答案是:1
a是个全局变量的a,
那么在浏览器中就是a === window.a ,a === window['a'],
所以'a' in window这个判断条件是成立的,然后a被赋值为 '1'
那么在浏览器中就是a === window.a ,a === window['a'],
所以'a' in window这个判断条件是成立的,然后a被赋值为 '1'
同个作用域下变量初始化与位置无关
add();
var a=1;
var b=2;
function add(){
console.log(a+b);
}
var a=1;
var b=2;
function add(){
console.log(a+b);
}
相当于:
var a=1;
function add(){
console.log(a+b);
}
var b=2;
add();
输出:3