JS作用域

作用域
作用:读、写
域:空间、局限、地区
—-JS剖析器—–

script 全局变量、全局函数。【自上而下】

函数域 部分变量、部分函数。【自里而外】

<script>
    alert(a);
    var a = 1;
    function fn1(){
        alert(2);
    }
</script>

1)JS的预剖析

找一些东西 【var function 参数】
1、var a = 1;
找到 var a,设置成 a = undefined。不读取后边的 = 1。
【一切的变量,在正式运转代码之前,都赋值一个值,undefined】
2、fn1 = function fn1() { alert(2); }
【一切的函数,在正式运转代码之前,都是全部函数块,不运转里边的内容】

**预剖析机制
碰到重名的:只留一个,留下不留上。变量和函数重名,不管高低,留函数。

2)逐行解读代码
1、alert(a); //undefined
因为JS的预剖析中,var a = undefined。
【最先解读代码,从JS的预剖析中去找】
2、var a = 1; //经由过程表达式将a变成1
表达式: = – + * / % ++ — ! 参数
【能转变值得都是表达式,表达式能修正预剖析的值】
3、function fn1(){} //函数,没被挪用,不会实行内部代码

<script>
    var a = 1;
    alert(b); //error: not a defined
</script>
<script>
    alert(a); //1
    var b = 2;
</script>

//script 自上而下,实行完script1,再实行script2。
//script1中运用,本身未定义,在script2中定义的变量,会报错
//script2中运用,script1中定义的变量,能够运用。

<script>
    var a = 1;
    function fn1 () {
        alert(a);  //1
    }
    fn1();
</script>

1、script预剖析【var function 参数】
var a = undefined
function fn1(){}
2、逐行解读代码
var a = 1; //表达式
function fn1(){} //不实行
fn1() //函数挪用
2.1 预剖析 【var function 参数】
2.2逐行解读代码
3、继承逐行解读全局代码

function(){} //运转由里到外
作用域链
子级作用域(函数)没有找到 【var function 参数】,回到父级作用域找到【var function 参数】
逐行剖析代码,实行表达式会变动 父级【var function 参数】内容

子级作用域(函数)找到【参数】,举行预剖析 = var 参数(部分变量)

<script>
    var a = 2;
//  function test (var a){} 
    function test (a){
      alert(a); //1     
    }
    test(1);
</script>

1、有传参的情况下,会默许在子级函数作用域,剖析 var a = undefined
2、逐行解读代码
var = 参数 //实行表达式,不传参就是undefined
alert(a) //1 先在当前作用域找a,假如有就直接运用,假如没有就去父级作用域找。【由里而外】

JS没有块级作用域的观点,会剖析if(){} for(){}里边的var。并添加到当前环境中。不会被烧毁
FF不能对if(){}, for(){} 里边function举行预剖析,兼容性

<script>
    function add(num1, num2) {
        var sum = num1 + num2;
        return sum;
    }
    var result = add(10, 20); //30
    alert(sum);  //因为sum不是全局变量,会报错
    
    function add2(num1, num2) {
        sum = num1 + num2;
        return sum;
    }
    var result = add2(10, 20); //30
    alert(sum);  //30 因为运用了匿名函数,变成了全局变量
</script>

在子级作用域中,运用匿名变量,会加载到全局作用域中。

    原文作者:李佳臣
    原文地址: https://segmentfault.com/a/1190000017308316
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞