JavaScript-JavaScript预解析

网友投稿 263 2022-11-17

JavaScript-JavaScript预解析

变量提升、函数提升

a = 100;console.log(a);var a;test();function test() { a = 101; console.log(a);}

运行结果:100101

var a = 10;(function() { var a = b = 100; // 等价于 (没有var) b = 100, var a = b;})();console.log(a);console.log(b);

1. 从函数内部找b,寻找失败,转向函数外部寻找b。 2. 函数外部找b,找不到就在全局创建b。 var b = 100;

运行结果:10100

实例:(知识点:变量提升、this概念)

a = 100;console.log(a);var a;test();function test() { a = 101; console.log(a); console.log(this.a);}运行结果:100101undefined

this == window, node环境无window,因此this.a为undefined。

小知识:

JS预解析

JS解析器执行JS代码时分为两个过程:预解析过程和执行代码过程。

预解析过程

JS解析器在执行第一步预解析的时候,会从代码的开始搜索直到结尾,只去查找var、function等内容。一般把第一步称之为“JavaScript的预解析”。

console.log(a);var a=1;console.log(a);function a(){console.log(2);}console.log(a);var a=3;console.log(a);function a(){console.log(4);}console.log(a);

1.找到第一个var存值为undefined(注意不会为其赋值为1,而是undefined)

2.function a(){console.log(2);}代替前面var

3.var =3不会替代function

4.function a(){console.log(4);}替代function a(){console.log(2);}

5.预解析结果:把a=function a(){console.log(4);}存在预解析的仓库里面

函数中的变量只会提前到函数的作用域中的最前面,不会出去。预解析会分段(多对的script标签中函数重名,预解析的时候不会冲突)。

作用域链

作用域链 : 执行表达式时,先在自己预解析中找,如果没有找到,会向它的父级作用域找,如果找不到,报错。

f1();console.log(a); // ReferenceError: a is not definedfunction f1() { var a=9; console.log(a);}

参考链接:

(JavaScript 解析器、预解析、变量提升、函数提升)

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:基于虚拟仪器的温湿度监控系统
下一篇:数据显示系统的介绍
相关文章

 发表评论

暂时没有评论,来抢沙发吧~