JS词法作用域

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

在 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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容