作用域

JavaScript 中的作用域是我们可以有效访问变量或函数的区域。作用域规定了如何查找变量,也就是确定当前执行代码对变量的访问权限。

JavaScript 有两种类型的作用域:全局作用域、局部作用域。局部作用域又可以分为:函数作用域、块作用域(ES6)和其他更具体的作用域。

全局作用域

let age= 18function foo() {// 不是嵌套函数// 函数内部可以访问函数外部变量return age
}foo() // 18

函数作用域

function text() {var age = 18
}// 函数外部访问不到函数内部变量
console.log(age) // undefined

块作用域

{let age = 18
}// let、const 关键字声明的变量,只在其所在的代码块 {} 内有效。
console.log(age) // error

词法作用域和动态作用域

词法作用域是在定义时确定的,它关注函数在何处声明。

动态作用域是在运行时确定的(this 也是),它关注函数从何处调用(常与 this 挂钩)。

JavaScript 采用的是词法作用域,又称静态作用域。下面我们来看看示例:

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

分析

如果是词法作用域,调用 foo 函数时,会先在其内部作用域中查找,如果找不到,往上一层查找,找到了 value,结果为 1。

如果是动态作用域,调用 foo 函数时,同样会先在其内部作用域中查找,如果找不到,会到调用 foo 函数的作用域中查找(这里是 bar),结果为 2。

作用域链

一般情况下,变量取值应到创建这个变量的函数的作用域中取值。如果在当前作用域找不到,向上级作用域查找,直到全局作用域,这么一个查找过程形成的链条就叫做作用域链。

  1. 每当编译器遇到变量或对象时,它都会遍历当前执行上下文的整个作用域链(Scope chain),以查找它。
  2. 如果没有在那里找到它,它遍历原型链(prototype chain),如果它也没有找到,它会抛出未定义的错误。
  3. 编译器通过查看函数在代码中的位置来创建函数的作用域。
  4. 编译器创建称为作用域链(Scope chain) 的等级层次结构,全局作用域(Global Scope) 位于此层次结构的顶部。
  5. 当代码中使用变量时,编译器会向后查看作用域链,如果找不到,则抛出未定义的错误。

更多资料

  • JavaScript 深入之词法作用域和动态作用域
  • 变量作用域,闭包

http://www.taodudu.cc/news/show-3327935.html

相关文章:

  • 详解JS 作用域与作用域链
  • JavaScript作用域与闭包
  • JS作用域
  • JS作用域链详解
  • JavaScript作用域和作用域链详解
  • javascript作用域
  • js作用域详解
  • js中的作用域详解
  • 理解JS的作用域
  • Js作用域与作用域链详解
  • PHP截取中英文混合字符串
  • python中英文混合字符串对齐
  • TeXstudio 中英文混合编辑器显示异常
  • php中英文章,php统计中英文混合的文章字数
  • js 中文英文数字首字母混合排序
  • elasticsearch 处理中英文混合文档
  • 中英文混合正则
  • pythongo混合_Go+Python双语言混合开发
  • QT中英文混合排序
  • python中英文混输对不齐_python中英文混合字符串对齐输出
  • java中英文混合排序_Java编程实现中英混合字符串数组按首字母排序的方法
  • 中英文混合html加密,JS实现中英文混合文字溢出友好截取功能
  • ik php分词,ik中英文混合分词器
  • php截取英语,php 截取中英文混合字符串的方法
  • 中英文混合排序
  • 人机混合智能
  • tesseract 中英文混合识别
  • java中英文汉语混合排序,Android实现列表数据按名称排序、中英文混合排序
  • java中英文混合字符判断,java实现中英文混合字符截取方法
  • List中英文混合排序

JS 作用域和作用域链相关推荐

  1. js作用域及作用域链概念理解及使用

    之前写过一篇JavaScript 闭包究竟是什么的文章理解闭包,觉得写得很清晰,可以简单理解闭包产生原因,但看评论都在说了解了作用域链和活动对象才能真正理解闭包,起初不以为然,后来在跟公司同事交流的时 ...

  2. js 闭包作用域和作用域链_Java:伪造工厂的闭包以创建域对象

    js 闭包作用域和作用域链 最近,我们想创建一个域对象,该对象需要具有外部依赖关系才能进行计算,并且希望能够在测试中解决该依赖关系. 最初,我们只是在领域类中引入依赖关系,但这使得无法在测试中控制其值 ...

  3. Js中的作用域和作用域链

    Js中的作用域和作用域链 前言 阅读本文,请先阅读:Js中的函数相关:创建函数的三种方式.函数的形参和实参.返回值.return.break.continue的区别.重载和arguments.匿名函数 ...

  4. JS进阶学习(作用域、函数进阶、解构赋值、原型链)

    文章目录 1.面相对象编程介绍 2.ES6中的类和对象 3.类的继承 ES6中的类和对象 三个注意点 作用域 局部作用域 全局作用域 作用域链 JS垃圾回收机制(GC) JS垃圾回收机制-算法说明 闭 ...

  5. 详解JS 作用域与作用域链

    作用域和作用域链方面的知识是JS的重点,去面试十个有八个都会问你这块的知识,所以说这块是特别特别的重要,下面我们好好理解一下作用域和作用域链到底是个什么: 先上一段代码: var a = 'jack' ...

  6. 深入理解JS作用域和作用域链

    作用域(scope) 1.什么是作用域 概念:作用域是在程序运行时代码中的某些特定部分中变量.函数和对象的可访问性. 从使用方面来解释,作用域就是变量的使用范围,也就是在代码的哪些部分可以访问这个变量 ...

  7. JS作用域与作用域链附测试题

    分类 全局作用域 函数作用域 块级作用域(ES6之后) 作用 隔离变量,不同作用域下同名变量不会有冲突 作用域与执行上下文 区别 – 除全局作用域之外,每个函数都会创建自己的作用域,作用域在函数定义时 ...

  8. 如何理解JS中作用域和作用域链

    1.背景介绍 任何程序设计语言都有作用域的概念,简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期.在JavaScript中,变量的作用域有全局作用域和局部作用域两 ...

  9. js作用域及作用域链

    一.作用域定义 作用域就是代码的执行环境,全局执行环境就是全局作用域,函数的执行环境就是私有作用域,它们都是栈内存.执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为.每个执行环境都有一 ...

最新文章

  1. 升维:ValueError: all the input arrays must have same number of dimensions,
  2. 【Flocking、PPO无人机群控制算法】基于Flocking和PPO深度强化学习的无人机群控制算法的MATLAB仿真
  3. IOS零碎技术整理(3)-获取wifi列表
  4. 我的bolg,我的收获(MVC首次接触)
  5. 全球数据库--基金/管理产品--分类/行业平均
  6. 《变革中的思索》连载六:IT=IP+IQ
  7. 拓端tecdat|R语言极值理论:希尔HILL统计量尾部指数参数估计可视化
  8. unity 灯光阴影
  9. BZOJ2160 拉拉队排练
  10. python清屏命令-python清屏命令
  11. Pentest Wiki Part4 后渗透(二)
  12. 军用计算机通用规范测试试验,军用装备环境可靠性试验项目表
  13. Rust编程语言入门教程(二)-核心概念(所有权(Ownership) 和生命周期)、变量声明(遍历数组)
  14. 利用user-agent取得浏览器版本号
  15. 模拟实现ATM系统——Java
  16. Django 中针对基于类的视图添加 csrf_exempt
  17. USB1.1 协议开发
  18. 塞班java手机qq浏览器下载_手机QQ浏览器 for Symbian S60v3
  19. vb mysql 转义字符,MySQL_在VB.NET应用中使用MySQL的方法, 绪言 在Visual Studio中使用 - phpStudy...
  20. 8月教材有变,如何应对PMP考试

热门文章

  1. Gen2-UHF-RFID-Reader学习(六)reader
  2. 初一年级计算机基础知识ppt,七年级计算机基础知识.ppt
  3. 最大化LED亮度以降低系统成本
  4. iPad黑屏无法开机
  5. VUE 调用PC摄像头 全浏览器可用
  6. 60.IP地址分配(静态分配+动态分配+零配置)
  7. 英汉词典c语言实验报告,大学课程英汉电子词典设计报告设计C语言C语言程序设计.doc...
  8. mondrian olap 示例_java开源的OLAP引擎--mondrian
  9. 计算机专业要求英语翻译,专业英语翻译应具备哪些专业的素养
  10. [移动应用安全]移动应用安全培训PPT