变量提高是指:使用var
声明变量时,JS会将变量提高到所处做用域的顶部。举个简单的例子:javascript
console.log(foo); // undefined var foo = 'JavaScript'; // 输出 undefined
上面的例子中,在声明变量foo
以前打印这个变量,输出了undefined
而没有报错。html
这样的现象在函数中一样存在:前端
function example(){ console.log(foo); var foo = 'Hello JavaScript' } example(); // 输出:undefined
事实上,上面的代码等价于:java
function example(){ var foo; console.log(foo); foo = 'Hello JavaScript' } example(); // 输出:undefined
函数提高是指使用函数声明建立函数时,把整个函数声明提高到做用域的顶部的现象。
看下面的例子:函数
typeof foo; // function typeof bar; // undefined // 使用函数声明建立函数 function foo(){ console.log('JavaScript'); } // 使用函数表达式建立函数 var bar = function(){ conosle.log('ECMAScript'); }
上面的例子中,使用函数表达式建立的函数bar
出现了变量提高;使用函数声明建立的函数foo
出现了函数提高。code