javascript (es5之前,es6中不存在变量提升)中存在两种变量提升机制。
1.用var声明变量时,变量的声明会提升到js的顶部(注意是声明提前而不包括赋值)。所以console.log(x);var x = 2;时并不会报错而是输出undefined
,这个相当于var x;console.log(x);x=2;因为变量提升所以x的声明被提到console.log之前。但是赋值不会提前,所以输出undefined,而不是2.而如果没有声明直接console.log(x);则会报错,因为x不存在。
2.用function定义函数时,存在变量提升。所以x();function x(){console.log(‘xxxx’)}是可以正常运行的,
因为函数x有变量提升,会提升到顶部,于是函数便正常运行了。但是对于用函数表达式声明的函数,如var x = function(){console.log(‘xx’)}则不会进行变量提升,于是在x();var x = function(){console.log(‘xxx’)}时会报错,
显示x is not a function因为表达式定义的函数不会变量提升就报找不到函数的错误了。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/16602.html