JS 作用域和作用域链
作用域
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。
作用域链
一般情况下,变量取值应到创建这个变量的函数的作用域中取值。如果在当前作用域找不到,向上级作用域查找,直到全局作用域,这么一个查找过程形成的链条就叫做作用域链。
- 每当编译器遇到变量或对象时,它都会遍历当前执行上下文的整个作用域链(Scope chain),以查找它。
- 如果没有在那里找到它,它遍历原型链(prototype chain),如果它也没有找到,它会抛出未定义的错误。
- 编译器通过查看函数在代码中的位置来创建函数的作用域。
- 编译器创建称为作用域链(Scope chain) 的等级层次结构,全局作用域(Global Scope) 位于此层次结构的顶部。
- 当代码中使用变量时,编译器会向后查看作用域链,如果找不到,则抛出未定义的错误。
更多资料
- 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 作用域和作用域链相关推荐
- js作用域及作用域链概念理解及使用
之前写过一篇JavaScript 闭包究竟是什么的文章理解闭包,觉得写得很清晰,可以简单理解闭包产生原因,但看评论都在说了解了作用域链和活动对象才能真正理解闭包,起初不以为然,后来在跟公司同事交流的时 ...
- js 闭包作用域和作用域链_Java:伪造工厂的闭包以创建域对象
js 闭包作用域和作用域链 最近,我们想创建一个域对象,该对象需要具有外部依赖关系才能进行计算,并且希望能够在测试中解决该依赖关系. 最初,我们只是在领域类中引入依赖关系,但这使得无法在测试中控制其值 ...
- Js中的作用域和作用域链
Js中的作用域和作用域链 前言 阅读本文,请先阅读:Js中的函数相关:创建函数的三种方式.函数的形参和实参.返回值.return.break.continue的区别.重载和arguments.匿名函数 ...
- JS进阶学习(作用域、函数进阶、解构赋值、原型链)
文章目录 1.面相对象编程介绍 2.ES6中的类和对象 3.类的继承 ES6中的类和对象 三个注意点 作用域 局部作用域 全局作用域 作用域链 JS垃圾回收机制(GC) JS垃圾回收机制-算法说明 闭 ...
- 详解JS 作用域与作用域链
作用域和作用域链方面的知识是JS的重点,去面试十个有八个都会问你这块的知识,所以说这块是特别特别的重要,下面我们好好理解一下作用域和作用域链到底是个什么: 先上一段代码: var a = 'jack' ...
- 深入理解JS作用域和作用域链
作用域(scope) 1.什么是作用域 概念:作用域是在程序运行时代码中的某些特定部分中变量.函数和对象的可访问性. 从使用方面来解释,作用域就是变量的使用范围,也就是在代码的哪些部分可以访问这个变量 ...
- JS作用域与作用域链附测试题
分类 全局作用域 函数作用域 块级作用域(ES6之后) 作用 隔离变量,不同作用域下同名变量不会有冲突 作用域与执行上下文 区别 – 除全局作用域之外,每个函数都会创建自己的作用域,作用域在函数定义时 ...
- 如何理解JS中作用域和作用域链
1.背景介绍 任何程序设计语言都有作用域的概念,简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期.在JavaScript中,变量的作用域有全局作用域和局部作用域两 ...
- js作用域及作用域链
一.作用域定义 作用域就是代码的执行环境,全局执行环境就是全局作用域,函数的执行环境就是私有作用域,它们都是栈内存.执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为.每个执行环境都有一 ...
最新文章
- 升维:ValueError: all the input arrays must have same number of dimensions,
- 【Flocking、PPO无人机群控制算法】基于Flocking和PPO深度强化学习的无人机群控制算法的MATLAB仿真
- IOS零碎技术整理(3)-获取wifi列表
- 我的bolg,我的收获(MVC首次接触)
- 全球数据库--基金/管理产品--分类/行业平均
- 《变革中的思索》连载六:IT=IP+IQ
- 拓端tecdat|R语言极值理论:希尔HILL统计量尾部指数参数估计可视化
- unity 灯光阴影
- BZOJ2160 拉拉队排练
- python清屏命令-python清屏命令
- Pentest Wiki Part4 后渗透(二)
- 军用计算机通用规范测试试验,军用装备环境可靠性试验项目表
- Rust编程语言入门教程(二)-核心概念(所有权(Ownership) 和生命周期)、变量声明(遍历数组)
- 利用user-agent取得浏览器版本号
- 模拟实现ATM系统——Java
- Django 中针对基于类的视图添加 csrf_exempt
- USB1.1 协议开发
- 塞班java手机qq浏览器下载_手机QQ浏览器 for Symbian S60v3
- vb mysql 转义字符,MySQL_在VB.NET应用中使用MySQL的方法, 绪言
在Visual Studio中使用 - phpStudy...
- 8月教材有变,如何应对PMP考试
热门文章
- Gen2-UHF-RFID-Reader学习(六)reader
- 初一年级计算机基础知识ppt,七年级计算机基础知识.ppt
- 最大化LED亮度以降低系统成本
- iPad黑屏无法开机
- VUE 调用PC摄像头 全浏览器可用
- 60.IP地址分配(静态分配+动态分配+零配置)
- 英汉词典c语言实验报告,大学课程英汉电子词典设计报告设计C语言C语言程序设计.doc...
- mondrian olap 示例_java开源的OLAP引擎--mondrian
- 计算机专业要求英语翻译,专业英语翻译应具备哪些专业的素养
- [移动应用安全]移动应用安全培训PPT