JavaScript代码的执行是由浏览器中的JavaScript解析器来执行的。JavaScript解析器执行JavaScript代码的时候,分为两个过程:预解析过程和代码执行过程
预解析过程:
1、把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升赋值。
2、把函数的声明提升到当前作用域的最前面,只会提升声明,不会提升调用。
3、先提升function,在提升var
JavaScript的执行过程

如果变量和函数同名的话,函数优先

变量提升
1、变量提升:定义变量的时候,变量的声明会被提升到作用域的最上面,变量的赋值不会提升。
2、函数提升:JavaScript解析器首先会把当前作用域的函数声明提前到整个作用域的最前面
我们来看几个例子吧


在if中

函数提升
声明一个函数可以可以写成几种形式

那这两种形式在函数的提升中又有什么区别呢?我们看看下面的例子


为什么结果会不一样呢?其实我们把函数表达式var foo = function() { var foo = '123';}看成两个部分就好。一部分是var foo,而一部分是foo = function() { var foo = '123';},变量foo提升了,仅声明了,所以返回的结果是undefined。而下面是整个函数foo提升了。
第一次写小笔记 主要是方便自己查找 如有不足 麻烦大家点评
网友评论