JavaScript预解析过程
来源:互联网 发布:软件注册赚钱靠谱吗 编辑:程序博客网 时间:2024/06/06 05:30
我们经常在面试题中看到这样的问题
var a=18;
f1();
function f1(){
var b=9;
console.log(a);
console.log(b);
var a="123";
}
大家可以思考一下上面的代码到底输出什么?
答案是:undefined 9。你写对了吗?
有些人的答案可能是18 ,9。对此答案可能想不通,下面介绍一下浏览器到底是怎么进行解析的?
首先,一段代码发到浏览器,浏览器会先进行预解析,其过程是:先找到全局作用域,然后在其中找声明,也就是var和function,把它们提前,再接着从上到下顺序执行。如果遇到function中也有声明和子function,也按照刚才的方法进行排序,然后再执行代码。
上面的代码例子,可以分布进行,第一步,找全局作用域:
var a;
function f1(){
var b=9;
console.log(a);
console.log(b);
vara="123";
}a=18;f1();
第二步,找次级作用域:
var a;
function f1(){
var b;
var a;
b=9;
console.log(a);
console.log(b);
a="123";
} a=18; f1();
输出结果:
最后,很容易看出其中a一个是全局变量,一个是局部变量,但是函数里面的那个a只声明但是没有赋值,所以输出为undefined,而b在声明变量后又在输出之前赋值了所以输出9。
以上就是预解析过程分析,掌握 了之后就不容易在写代码过程出现不能找到的错误了!
- JavaScript预解析过程
- 浅谈javascript解析引擎解析过程
- 初识JavaScript的解析与执行过程
- javascript 预解析
- JavaScript中的预解析
- JavaScript预解析
- javascript预解析详解
- JavaScript的预解析
- Javascript预解析
- JavaScript预解析
- JavaScript预解析详解
- 详谈JavaScript预解析
- JavaScript解析过程你真的清楚吗??
- 示例详解JavaScript解析器的执行过程
- JavaScript解析过程你真的清楚吗??
- javascript函数执行环境创建过程及解析
- javascript解析机制——预解析
- javascript解析机制——预解析
- 我的Linux 学习之路
- vue表单提交
- QScrollArea使用的小问题
- bootstrap table实现server分页序号连续(当前页从上一页的结束序号开始)
- activiti根据当前节点获取下一个UseTask节点
- JavaScript预解析过程
- The Triangle 【nyoj-18】【动态规划】
- RefreshScrollviewLayout下嵌套ViewPager横向滑动冲突解决
- C++ trivial、non-trivial及POD类型
- 性能优化——记高性能MySQL
- 阿里 离线数据同步工具 DataX 初试
- Java开发中的23种设计模式详解
- 2017多校训练6-1008:Kirinriki(HDU6103)
- 为什么用下标遍历容器如此有用