首页 > 代码库 > JavaScript变量提升
JavaScript变量提升
一、问题:
window.onload=function(){
var bar=1;
function test(){
console.log(bar);
}
test();
};
结果为1
window.onload=function(){
var bar=1;
function test(){
console.log(bar);
var bar=2;
console.log(bar);
}
test();
};
结果为 undefined 2
二、作用域链:
当在在函数内部要访问一个变量的时候,首先查找自己的内部作用域有没有这个变量,如果没有就到这个对象的原型对象中去查找,还是没有的话,就到该作用域所在的作用域中找,直到到window所在的作用域
三、JavaScript变量提升
虽然变量bar的定义在后面,不过浏览器在解析的时候,会把变量的定义放到最前面,上面的test函数相当于
function test(){
var bar;
console.log(bar); //undefined
bar=2;
console.log(bar); //2
}
四、函数的定义也会到提升到最前面
var foo=function(){
console.log(1);
};
function foo(){
console.log(2);
}
foo(); //结果为1
上面的代码相当于:
function foo(){
console.log(2);
}
var foo;
foo=funciton(){
console.log(1);
}
foo(); //1
JavaScript变量提升