1.提升的概念
简单说就是在js代码执行前引擎会先进行预编译,预编译期间会将变量声明与函数声明提升至其对应作用域的最顶端。
2.变量提升
例:
console.log(a);//undefined
var a = 10;
根据变量的提升原则,var a会被优先提升到最前面编译,但赋值是在运行的时候完成的。实际上预编译的代码是:
var a;
console.log(a);
a = 10
3.函数提升
函数和变量一样,在编译阶段会被提升到当前作用域最前面编译,且函数是一等公民,优先编译函数,如:
console.log(a);//function a(){}
var a = 10;
function a(){}
console.log(a);//10
变量的声明虽然在函数声明之前,但是函数优先被编译,实际预编译的代码是:
function a(){}
console.log(a);
a = 10
console.log(a);
函数提升只会提升函数声明,而不会提升函数表达式
例:
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
网友评论