一、变量提升
在ES6中提出了块级作用域,用var声明的变量,起作用域应为对整个块都起作用,所以会跑偏;而且使用var声明的变量会出现“变量提升”现象。
那么什么是变量提升呢?用以下代码直观感受一下:
其执行顺序应为:
二、函数提升
js中创建函数有两种方式:函数声明式和函数字面量式。只有函数声明才存在函数提升!如:
1
2
3
4
|
console.log(f1);
// function f1() {}
console.log(f2);
// undefined
function
f1() {}
var
f2 =
function
() {}
|
只所以会有以上的打印结果,是由于js中的函数提升导致代码实际上是按照以下来执行的:
1
2
3
|
function
f1() {}
// 函数提升,整个代码块提升到文件的最开始<br> console.log(f1);
console.log(f2);
var
f2 =
function
() {}
|
实例:
function Text(n){
console.log(n);
var n=2;
function n(){
}
console.log(n)
}
Text(1)
执行顺序应为:
var n
function n(){
}
console.log(n);
n=2;
console.log(n)