js是运行在浏览器端的,浏览器内部众多功能中有一个小功能叫做js解析器。
js在解析器在运行js代码时分为下面两步:
1、把所有的 变量、函数、参数 提前到当前作用域的顶部。并且所有的变量,参数都给一个undefined的值,如果是函数就给把整个函数块拿过来。如果遇见重名后一个会覆盖前一个,如果变量和函数重名,函数覆盖变量。
2、逐行执行代码(从上到下,从左到右)
遇到变量、函数调用、参数 去预习解析里找
//表达式:= + - * / % ++ -- ! 参数 ...
--遇见表达式 :表达式可以修改 预解析后的值。
--遇见函数:再开一个新的作用域,进行的预解析,逐行执行代码。如果当前作用域里的变量没有带var,那么就一层一层的向上级作用域里去找。找不到报错。
注函数预解析:
1、函数声明可以被预解析,所以可以先调用,再声明。
2、函数表达式,不会被预解析,所以只能先声明再调用,不能把调用放在声明的前面(不然就报错)
网友评论