预解析
个人定义:js代码执行之前,会在相应的执行环境中,预先把一些东西解析到内存。
正式执行前,解析 var function 等定义,只有变量和函数才会发生变量提升,只是提升声明不会赋值。
预解析哪些东西: var 、function.
预解析顺序:
1.首先找到<script>...</script>标签,按照<script>块依次解析。不会出现跨块解析的情况。
2.解析执行环境。首先解析的是全局作用域范围,当执行函数时,才会进入函数的解析执行环境。
3.对标识符 var 、function 进行解析。说明function的优先级高于var。
function example5() {
var f = function() {return 1;};
function f() {return 2;};
return f;
}
var a5 = example5();
alert(a5()); //1
解析为:
function example5() {
var f; // function声明
var f; // var声明
f = function f() {return 2;}; // function赋值
f = function() {return 1;}; // 等号赋值
return f;
}
var a5 = example5();
alert(a5());
预解析通常就是我们常说的声明提前。
作用域: 个人理解为预解析中的解析执行环境。
分为全局作用域、函数作用域(函数内部)、块级作用域({}大括号内部)
注意var 属于函数作用域,let属于块级作用域。
原文:https://www.cnblogs.com/lixiaobing/p/9859093.html