解释 JavaScript 中的作用域和作用域链的概念。

简介: 【4月更文挑战第4天】JavaScript作用域定义了变量和函数的可见范围,静态决定于编码时。每个函数作为对象拥有`scope`属性,关联运行期上下文集合。执行上下文在函数执行时创建,定义执行环境,每次调用函数都会生成独特上下文。作用域链是按层级组织的作用域集合,自内向外查找变量。变量查找遵循从当前执行上下文到全局上下文的顺序,若找不到则抛出异常。

在 JavaScript 中,作用域是指变量和函数可访问的范围。它是静态的,在编写代码时就确定了。作用域具体表现形式为一段特定的代码,在该代码段中的变量和函数是封闭的、独立的,这样变量才不会泄露、污染。

JavaScript 中的每个函数都是一个对象,对象中有些属性可以访问,有些属性不可以访问,其中scope就是其中一个。scope指的就是作用域,其中存储了运行期上下文的集合。运行期上下文是当函数执行时,会创建的一个内部对象。一个执行期上下文定义了一个函数执行时的环境,函数每次执行时对应的执行上下文都是独一无二的,所以多次调用一个函数会导致创建多个执行上下文,当函数执行完毕,执行上下文被销毁。

作用域链是由多个上下级关系的作用域形成的链,它的方向是从下向上(从内到外)的查找变量时就是沿着作用域链来查找。查找一个变量的查找规则为:在当前作用域下的执行上下文中查找对应的属性,如果有直接返回,否则进入下一步;在上一级作用域的执行上下文中查找对应的属性,如果有直接返回,否则进入下一步;再次执行上一步相同操作,直到全局作用域,如果还找不到就抛出找不到的异常。

相关文章
|
2月前
|
JavaScript 前端开发
浅谈js作用域
浅谈js作用域
28 0
|
9天前
|
JavaScript 前端开发
js 变量作用域与解构赋值| 22
js 变量作用域与解构赋值| 22
|
9天前
|
缓存 JavaScript 前端开发
了解js基础知识中的作用域和闭包以及闭包的一些应用场景,浅析函数柯里化
该文章详细讲解了JavaScript中的作用域、闭包概念及其应用场景,并简要分析了函数柯里化的使用。
了解js基础知识中的作用域和闭包以及闭包的一些应用场景,浅析函数柯里化
|
1月前
|
JavaScript 前端开发
JavaScript基础知识-作用域(action scope)
关于JavaScript基础知识中作用域的介绍。
26 1
JavaScript基础知识-作用域(action scope)
|
23天前
|
自然语言处理 JavaScript 前端开发
探索JavaScript中的闭包:从基础概念到实际应用
本文深入探讨了JavaScript中闭包的概念,从定义、作用域链和实际应用等方面进行了详细阐述。通过生动的比喻和实例代码,帮助读者理解闭包在函数执行上下文中的重要性,以及如何在实际开发中有效利用闭包解决复杂问题。同时,文章也指出了过度使用闭包可能导致的潜在问题,并给出了相应的优化建议。
|
1月前
|
JavaScript 前端开发
JavaScript 作用域
JavaScript 作用域
23 9
|
2月前
|
JavaScript 前端开发
使用 let 将有助于避免 JavaScript 中各种 var 引起的作用域问题。
这段内容介绍了JavaScript编程时的一系列最佳实践,包括使用`===`而非`==`进行比较、以`let`和`const`取代`var`定义变量、始终使用分号、采用合适的命名规范、利用模板字符串拼接、偏好ES6箭头函数、在控制结构中使用大括号、减少代码嵌套、应用默认参数、正确使用`switch`语句中的`break`与`default`分支、避免通配符导入以及简化布尔判断和避免不必要的三元运算符。遵循这些规则有助于提升代码的清晰度和可维护性。
16 2
|
2月前
|
JavaScript 前端开发
js bom的概念
js bom的概念
29 1
|
2月前
|
JavaScript 前端开发
|
2月前
|
自然语言处理 JavaScript 前端开发
JavaScript 中的作用域
【8月更文挑战第29天】
16 0