函数
声明提升:
1.变量声明的提升:
使用var声明的变量,会提前到当前作用域的开始位置被声明,而在原来的位置
被赋值。
举个栗子:
console.log(a); //undefined
var a = 1;
console.log(a); //1
在上面的代码中,在没有定义变量之前打印a,得到undefined,而并不是not
defined,说明此时变量已经被声明,只是还没有被赋值。
上面的代码相当于↓↓↓:
var a;
console.log(a); //undefined
a = 1;
console.log(a); //1
2.函数的提升:
在当前作用域内声明的function函数,在被解析时会整体提升,该函数可以在
当前作用域内的任何位置被调用。
举个栗子:
fn(); //hello
function fn(){
console.log("hello");
}
fn(); //hello
上面的代码相当于↓↓↓:
function fn(){
console.log("hello");
}
fn(); //hello
fn(); //hello
那么都会被提升,顺序是怎样的呢?
再举个栗子:
function fn(){
console.log(a); //function a(){2}
var a = "hello";
console.log(a); //hello
function a(){1}
console.log(a); //hello
a = "world";
console.log(a); //world
function a(){2}
console.log(a); //world
}
上面的代码相当于↓↓↓:
function fn(){
var a;
function a(){1}
function a(){2}
console.log(a); //function a(){2}
a = "hello";
console.log(a); //hello
console.log(a); //hello
a = "world";
console.log(a); //world
console.log(a); //world
}
从这个栗子可以看出:
当函数名和变量重名,变量的提升更高,函数的提升在变量的下面,使得函数
生效
声明:
纯属个人总结,有错误欢迎大家指出,互相学习,谢谢。