JavaScript是函数级作用域,不同于C系语言中的块级作用域。
JavaScript中会存在变量与函数提升问题
变量提升,只会提升变量声明,赋值不会提升,代码如下: //变量提升 (function() { var a = 'one'; var b = 'two'; var c = 'three' })(); //提升后变成: (function() { var a, b, c;//只提升变量的声明,赋值并不会提升上来。 a = 'one'; b = 'two'; c = 'three'; })(); View Code2. 函数提升:
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(); } View Code
转载于:https://www.cnblogs.com/Yann001/p/6641645.html
相关资源:JavaScript中变量提升与函数提升经典实例分析