作用域与作用域链的易错题

代码执行:

1)预解析

变量的作用域提升:

        JS执行之前遇到 var function 参数 就会把这些东西提升到代码的最开始位置

       变量放到预解析仓库的时候,JS会主动给变量附一个值:undefined

       函数放到预解析仓库的时候,是一个完整的函数块

       如果函数和变量重名了,那么剔除变量,留下函数

2)逐行解读

表达式: + = ++ -- % 参数...

        一组代码的集合,返回一个值。

        a,有副作用的表达式:var a = 1

        b,纯计算的表达式: 3+4

       特征:可以求出来一个值

表达式可以修改预解析的值!!!

alert(a);        //function a(){alert(2)}
var a = 1;
alert(a);        //1
function a(){
    alert(2);
}
alert(a);        //1
var a = 3;
alert(a);        //3
function a(){
    alert(4);
}
alert(a);        //3
var a = 1;
function fn1(){
    alert(a);       //undefined 
    var a = 2;
}
fn1();          
alert(a);       //1
var a = 1;
function fn1(a){
     alert(a);       //undefined  
     a = 2;
}
fn1();
alert(a);           //1     
var a = 1;
function fn1(a){
     alert(a);   //1
     a = 2;
}
fn1(a);
alert(a);       //1  

博主信息:

昵称:HamyFrank

网站:我的网站

邮箱: xueshuai_12@163.com

QQ:246776020

QQ群:1063233592

WeChat:js_cool_100

原文地址:https://www.cnblogs.com/xue-shuai/p/12000636.html