作用域

作用域是指程序源代码中定义变量的区域。
作用域规定如何查找变量,也就是确定当前执行代码对变量的访问权限。
JavaScript采用词法作用域,即静态作用域。

静态作用域和动态作用域

静态作用域是指函数作用域在函数定义的时候就决定了;
相比动态作用域是指函数的作用域在函数调用的时候才决定。
如下例子:

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

因为js采用词法作用域,函数作用域在声明的时候就决定了。声明foo函数的时候,先从foo函数内部查找是否有局部变量value,如果没有,根据书写的位置,查找上面一层代码,即全局变量,得到value=1,所以结果是打印1。

再来个难点的例子:

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

这里两段代码打印的结果都是"local scope",因为js采用的是词法作用域,函数作用域基于函数创建的位置。两段代码的函数定义都是在checkscope内,所以可以找到局部变量scope的值。跟哪里运行的函数是没有关系的。
引用权威指南的解释:JavaScript函数的执行用到了作用域链,这个作用域链是在函数定义的时候创建的。嵌套的函数f()定义在这个作用域链中,其中的变量scope一定是局部变量,不管何时何地执行函数f(),这种绑定在执行f()时依然有效。

javascript之深入理解词法作用域相关推荐

  1. 【Javascript】深入理解this作用域问题以及new/let/var/const对this作用域的影响

    理解this作用域 <javascript高级程序设计>中有说到: this对象是在运行时基于函数的执行环境绑定的:在全局函数中,this等于window,而当函数被作为某个对象调用时,t ...

  2. JavaScript词法作用域的简单介绍

    by Michael McMillan 迈克尔·麦克米兰(Michael McMillan) JavaScript词法作用域的简单介绍 (An easy intro to Lexical Scopin ...

  3. JavaScript夯实基础系列(一):词法作用域

      作用域是一组规则,规定了引擎如何通过标识符名称来查询一个变量.作用域模型有两种:词法作用域和动态作用域.词法作用域是在编写时就已经确定的:通过阅读包含变量定义的数行源码就能知道变量的作用域.Jav ...

  4. JavaScript之词法作用域和动态作用域

    作用域 作用域是指程序源代码中定义变量的区域. 作用域规定了如何查找变量,也就是确定当前执行代码对变量的访问权限. JavaScript 采用词法作用域(lexical scoping),也就是静态作 ...

  5. JavaScript词法作用域和动态作用域

    2019独角兽企业重金招聘Python工程师标准>>> 作用域 作用域是指代码中定义变量的区域. 作用域规定了如何查找变量,也就是确定当前代码执行对变量的访问权限 JavaScrip ...

  6. 深入学习js之——词法作用域和动态作用域

    开篇 当我们在开始学习任何一门语言的时候,都会接触到变量的概念,变量的出现其实是为了解决一个问题,为的是存储某些值,进而,存储某些值的目的是为了在之后对这个值进行访问或者修改,正是这种存储和访问变量的 ...

  7. 词法作用域和动态作用域

    JavaScript采用的是词法作用域 1.词法作用域 即函数定义时,即确定的作用域.js中的作用域链,在函数声明时候,就已经确定了,无论函数在何处调用,其作用域变量的查找都是按照定义是包含关系去查找 ...

  8. 你不知道的JS之作用域和闭包(二)词法作用域

    原文:你不知道的js系列 词法作用域(Lexical Scope) Lex time 一个标准的编译器的第一个阶段就是分词(token化) 词法作用域就是在词法分析时定义的作用域.换句话说,词法作用域 ...

  9. 如何延长作用域链_通过实例理解javaScript中的this到底是什么和它的词法作用域...

    最近,听到李笑来说,讲解编程的过程中,举例子很重要. 而且,我最近看的各种javaScript工具书中的例子,也都有点复杂. 所以啊,我试着举一些简单又直观的例子,与各位苦学javaScript的同学 ...

最新文章

  1. React 项目--创建组件(7)
  2. python命名空间和闭包_Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】...
  3. Switch Case中的经典
  4. php跳一跳小游戏,原生JS实现的跳一跳小游戏完整实例
  5. python上传本地文件到ftp_python实现的简单FTP上传下载文件实例
  6. 谷歌AI发布Deepfake检测数据集,真人多场景拍摄,生成3000段假视频
  7. Leetcode每日一题:168.excel-sheet-column-title(Excel表名称)
  8. MacBook取消自启动程序
  9. HDU 1269 迷宫城堡 (强连通分量,常规)
  10. 计算机基础雨课堂答案,基于“雨课堂”助推大学计算机基础课革新
  11. numpy 下载安装
  12. diff和patch工具打补丁
  13. java音乐bpm,Java Tempo.setBpm方法代码示例
  14. 计算机电子表格题教程,计算机电子表格题教程.doc
  15. c语言打开文件报错 13,求帮忙看一段打开文件的代码~~真心无力了
  16. mmsegmentation 训练自制数据集全过程
  17. python画抛物线_在python中利用最小二乘拟合二次抛物线函数的方法
  18. 3.1 YOLO系列理论(YOLOV1、YOLOV2、YOLOV3)
  19. 2016--Analysis of the DNN-based SRE systems in multi-language conditions
  20. 新闻!牛磨王抗磨网发布超燃猪年贺岁词 | “绿多多”绿色资产资讯

热门文章

  1. 翻译|记住一些常用的R包
  2. 计算机语言中call,call
  3. ubuntu 18.04安装owncloud 搭建自己的私有云盘
  4. Win10无故自动重启解决方法
  5. (DUNS)申请流程
  6. 今日头条“科技”,“娱乐”类文章的抓取
  7. 解决M1芯片 MAC 下 Goland(Intellij系列都适用) 无法 Debug 的问题
  8. 芯片低功耗睡眠模式下与看门狗的使用
  9. 新媒体营销与传统营销的区别
  10. nginx的location