c语言sscanf函数的用法是什么
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~