JS中的变量提升与函数提升
JavaScript是函数级作用域,不同于C系语言中的块级作用域。
JavaScript中会存在变量与函数提升问题
- 变量提升,只会提升变量声明,赋值不会提升,代码如下:
//变量提升 (function() { var a = 'one'; var b = 'two'; var c = 'three' })(); //提升后变成: (function() { var a, b, c;//只提升变量的声明,赋值并不会提升上来。 a = 'one'; b = 'two'; c = 'three'; })();
2. 函数提升:
JavaScript中函数有两种写法:
函数表达式 var fn=function (){//some code}
函数声明方式 function fn(){//some code}
只有函数声明式写法的函数才会被提升,与变量提升不同的是,函数体也会一同被提升,也就是把整个函数都提到前面去。
代码如下:
//函数提升 (function test1() { fn(); function fn() { console.log("我来自 fn test1"); } })(); test2(); function test4() { fn(); //TypeError: fn is not a function var fn = function () { console.log("我来自 fn test2"); } fn(); }