美文网首页
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作用域

    词法作用域 -js采用的是词法作用域,函数的作用域基于函数创建的位置。

  • JavaScript作用域和变量提升

    一、JS的作用域 1.JS采用词法作用域 首先,我们得知道JavaScript采取的是词法作用域,而不是动态作用域...

  • 容易错误的js

    JS词法作用域

  • 第八节: JavaScript中this指向问题

    1. this指向问题 1.1 认识词法作用域 其实我们js中的作用域就是词法作用域,我们会发现词法作用域最重要的...

  • 第八节 JavaScript中this指向问题

    this指向问题 1.1 认识词法作用域 其实我们js中的作用域就是词法作用域,我们会发现词法作用域最重要的特征是...

  • JS 作用域、作用域链、闭包、垃圾回收

    Scopes JS的作用域是静态作用域(static scope),也可以称为词法作用域(lexical scop...

  • 词法作用域&动态作用域

    词法作用域(静态作用域) 词法作用域也叫静态作用域,jsvascript为词法作用域。词法作用域关心的是你的函数申...

  • 词法作用域

    我们知道JavaScript并不具有动态作用域,它只有词法作用域,什么是词法作用域? 一、 词法作用域 词法作用域...

  • 你不懂的js上卷(一)

    基本概念 js引擎 编译器 作用域变量赋值操作 词法作用域(定义词法阶段的作用域) 1.由变量或者函数声明时的...

  • 2.词法作用域

    JavaScript的作用域模型采用的是词法作用域 词法阶段 查找 欺骗词法作用域 既然词法作用域完全由编写时来决...

网友评论

      本文标题:JS词法作用域

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