0
点赞
收藏
分享

微信扫一扫

JavaScript入门(part13)--预解析

豆丁趣 2022-01-20 阅读 63

学习笔记,仅供参考,有错必纠
参考自:pink老师教案


文章目录


预解析


预解析概述

js引擎运行js代码分为两步:

  • 预解析:js引擎会把js 里面所有的var还有function提升到当前作用域的最前面
  • 代码执行:按照代码书写的顺序从上往下执行

预解析又分为:

  • 变量预解析(变量提升):就是把所有的变量声明提升到当前作用域的最前面,但不提升赋值操作
  • 函数预解析(函数提升):就是把所有的函数声明提升到当前作用域的最前面,但不调用函数

预解析案例

案例1

 var num = 10;
 fun();

 function fun() {
     console.log(num);
     var num = 20;
 }

相当于执行了以下操作:

 var num;

 function fun() {
     var num;
     console.log(num);
     num = 20;
 }
 num = 10;
 fun();

案例2

 var num = 10;

 function fn() {
     console.log(num);
     var num = 20;
     console.log(num);
 }
 fn();

相当于以下代码:

 var num;

 function fn() {
     var num;
     console.log(num);
     num = 20;
     console.log(num);
 }
 num = 10;
 fn();

案例3

 var a = 18;
 f1();

 function f1() {
     var b = 9;
     console.log(a);
     console.log(b);
     var a = '123';
 }

相当于以下代码:

 var a;

 function f1() {
     var b;
     var a;
     b = 9;
     console.log(a);
     console.log(b);
     a = '123';
 }
 a = 18;
 f1();

案例4

 f1();
 console.log(c);
 console.log(b);
 console.log(a);

 function f1() {
     var a = b = c = 9;
     console.log(a);
     console.log(b);
     console.log(c);
 }

相当于以下代码:

 function f1() {
     var a;
     a = b = c = 9;
     // 相当于 var  a  = 9; b = 9; c = 9; b 和 c 直接赋值 没有var 声明 当 全局变量看
     // 集体声明  var a = 9, b = 9, c = 9;
     console.log(a);
     console.log(b);
     console.log(c);
 }
 f1();
 console.log(c);
 console.log(b);
 console.log(a);
举报

相关推荐

0 条评论