JS学习重点-----预解析

JS预解析

    • JS解析器在运行JS代码时分两步: 预解析和代码执行
      预解析
    • JS引擎会把JS里面所有 var 和 function 提升到当前作用域的最前面 代码执行时, 按照代码书写的顺序从上往下执行
    • 预解析分为变量预解析(变量提升) 和 函数预解析(函数提升)

例子1:

        //1.输出结果--undefined
        var num = 10;
        fun();
        function fun() {
                console.log(num);
                var num = 20;
        }
        //相当于执行了以下操作()
        var num;  //提升num = 10那个 num
        function fun() {
                var num;  //提升的是num = 20那个 num
                console.log(num);
                num = 20;
        }
        num = 10;
        fun();

例子2:

//2.输出结果--undefined, 20
var num = 10;
function fn() {
        console.log(num);
        var num = 20;
        console.log(num);
}
fn();
//相当于以下代码
var num;  //提升num = 10的 num
function fn() {
        var num;  //提升num = 20的 num
        console.log(num);
        num = 20;
        console.log(num);
}
num = 10;
fn();

例子3:

//3.输出结果--undefined, 9;
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;  //此时a = undefined, 就近原则, 待会儿log(a)取此值
        b = 9;  //b赋值为9
        console.log(a);
        console.log(b);
        a = '123';
}
a = 18;
f1();

 

例子4:

//4.(典中典)以下代码
function f1() {
        //相当于 var = 9; b = 9; c = 9; b 和 c 直接赋值 没有var声明, 当 全局变量 看
        //集体声明 var a = 9, b = 9, c = 9
        var a = b = c = 9;
        console.log(a);
        console.log(b);
        console.log(c);
}
f1();
console.log(c);  //全局变量c = 9
console.log(b);  //全局变量b = 9
console.log(a);  //局部变量a, 函数外不能使用

 

posted on 2022-11-01 17:37  lyxnov  阅读(7)  评论(0编辑  收藏  举报

导航