美文网首页
JS词法作用域

JS词法作用域

作者: 遨游在bug中 | 来源:发表于2017-05-27 14:48 被阅读0次

    作用域就是程序源代码定义变量的区域,规定如何去查找变量,作用域对变量的访问权。

    在 js 中词法作用域规则:

    1.函数允许访问函数外的数据.

    2.整个代码结构中只有函数可以限定作用域.

    3.作用规则首先使用提升规则分析

    4.如果当前作用规则中有名字了, 就不考虑外面的名字

    因为 JavaScript 采用的是词法作用域,函数的作用域在函数定义的时候就决定了。

    例子:

    
       var value = 1;
    
              function foo() {
    
                        console.log(value);
    
     }
    
            function bar() {
    
               var value = 2;
    
       foo();
    
    }
    
    bar(); //1
    
    

    浏览器执行bar函数,里面定义了局部变量value=2,但是没有操作,接着执行foo函数,console查找变量,如果没有就向上一级查找,也就是value=1,所以会打印1,bar函数内的局部变量没有被使用到,这个就是js的静态作用域(词法作用域)

    再看一个例子《javascript权威指南》

    
         var scope= "global scope";
    
       function checkscope(){ 
    
                       var scope="local scope";
    
                    function f(){ 
    
                               return   scope;    
    
                       }
    
                  return    f();
    
       }  
    
    checkscope();
    
    

    不论你在哪个return语句前console.log(scope)都会打印 local scope,原因也很简单,因为JavaScript采用的是词法作用域,函数的作用域基于函数创建的位置。

    而引用《JavaScript权威指南》的回答就是:JavaScript 函数的执行用到了作用域链,这个作用域链是在函数定义的时候创建的。嵌套的函数 f() 定义在这个作用域链里,其中的变量 scope 一定是局部变量,不管何时何地执行函数 f(),这种绑定在执行 f() 时依然有效。

    感谢

    https://github.com/mqyqingfeng/Blog/issues/4

    http://www.cnblogs.com/jiaozhuo/p/5743106.html

    相关文章

      网友评论

          本文标题:JS词法作用域

          本文链接:https://www.haomeiwen.com/subject/xbjqfxtx.html