JavaScript预解析
假如我们直接log一个num,那么结果肯定是报错,not defined,因为变量既没有声明也没有赋值
1.那如果我们先使用,再声明赋值呢?
得到的结果却是undefined.
2.如果我们在一个函数声明之前调用,会有什么结果呢?
是没有问题的.
3.我们之前还学习了匿名函数,那么先调用再声明,结果和上面一样吗?
结果是报错的.
这是为什么呢?这就引出了我们接下来要学习的:预解析
预解析
JavaScript代码是由浏览器中的JavaScript解析器来执行的,JavaScript解析器在运行JavaScript代码的时候分成两步:1.预解析 2.代码执行
这样就能解释刚刚我们上面的问题1:
将声明提前(var num),所以只声明没赋值,自然是undefined.
问题2:
将声明提升,而且不调用函数.
问题3也可以解决:
现在做一个案例
根据预解析的原理,变量和函数都要提升:
所以最后的结果为undefined.
现在我们再来看一道比较坑的题目:
原本是这样的:
先将函数声明提前
但是尤其注意这步是个坑!
如果想要集体声明,那应该是 var a = 9, b = 9, c= 9,而不是上面这种写法,上面的写法中,b和c都是没赋值,直接声明,前面我们学习过,在函数中不用赋值直接声明的是全局变量.
所以最后的结果是:
在函数外部的console.log(a)处报错,因为a = 9是局部变量.