简述js中的变量提升和函数提升
先看代码
var foo = function () {
console.log('foo1');
}
foo(); // foo1
var foo = function () {
console.log('foo2');
}
foo(); // foo2
function foo() {
console.log('foo1');
}
foo(); // foo2
function foo() {
console.log('foo2');
}
foo(); // foo2
这是因为 JavaScript 引擎并非一行一行地分析和执行程序,而是一段一段地分析执行。当执行一段代码的时候,会进行一个“准备工作”,比如第一个例子中的变量提升,和第二个例子中的函数提升
紧着这看下一个例子
function foo() {
console.log(a);
var a = 1;
console.log(a);
function a() {}
console.log(a);
console.log(b);
var b = 2;
console.log(b);
function b() {}
console.log(b);
}
foo();
首先明白一点, js中用 var 声明的变量存在变量提升(函数提升会在所有变量提升的后面)
看上面例子的具体解析过程
function foo() {
var a
var b
function a() {}
function b() {}
console.log(a); //a() {}
a = 1
console.log(a); //1
console.log(a); //1
console.log(b); // b() {}
b = 2
console.log(b); //2
console.log(b); //2
}
foo()