变量提升会将当前作用域的所有变量的声明提升到程序的顶部
作用域:先在内部找,如果内部找不到,向外查找
变量提升优先级(由高到低)
- 变量
- 函数
- 参数
- 提升
参数>提升
function foo(bar) {
console.log(bar);
var bar = 1;
}
foo(100);
运行结果:
100
函数>参数>提升
function foo(bar) {
console.log(bar);
var bar = 1;
function bar() {
return '函数1'
}
}
foo(100);
运行结果:
ƒ bar() {
return ‘函数1’
}
变量>函数>参数>提升
function foo() {
var bar = 300;
console.log(bar);
function bar() {
return '函数1'
}
}
foo();
运行结果:
300
举例:请写出代码的运行结果
1.
var foo = function() {
console.log(100);
}
function foo() {
console.log(200);
}
foo();
因为变量foo的优先级大于普通函数foo(),所以运行结果为100
运行结果:
100
2.
function c() {
var b = 1;
function a() {
console.log(b);
var b = 2;
console.log(b);
}
a();
console.log(b);
}
c();
先在内部找,如果内部找不到,向外查找。
运行结果:
undefined
2
1