Javascript 中的作用域和闭包概念是掌握该语言所需的基础模块。仅举几例,他们是构造函数、工厂函数和 IIFE 背后的无名英雄。
本文旨在使用实际示例解释 JavaScript 中的作用域。在后续文章中,我们将讨论 JavaScript 闭包。
作用域只是决定变量在 JavaScript 程序中的可用位置。基本上,范围有两种类型:
在全局范围内,变量在任何地方都可用,并且可以在程序中的任何地方使用。从技术上讲,当变量未在任何函数或 { 大括号 } 中声明时,就称它们位于全局范围内。
另一方面,对于局部作用域,变量仅在特定上下文中可用,并且只能在该上下文中使用。从技术上讲,当在函数或 { 大括号 } 中声明变量时,它们被称为局部作用域。
let x = 3; // x (global scoped) function addXY () { let y = 5; // y (locally scoped) return x + y; // returns 8 since x is available anywhere in this program }
ECMAScript 是标准化规范,定义了 JavaScript 等脚本语言的核心功能,确保跨平台的一致性和互操作性。正如国际单位制 (SI) 为米和千克等测量提供标准化框架以确保全球一致性一样,ECMAScript 为 JavaScript 等脚本语言制定了标准,确保它们在不同平台和环境中统一工作。
这个 JavaScript 标准化规范已经经历了多个版本的演变,每个版本中都添加了新功能和改进。这些版本中包括 ES6 (ECMAScript 2015),它提供了引入 let/const 的重大更新。
在 ES6 之前,JavaScript 中使用 var 关键字定义变量。使用 var,变量可以被重新定义和更新。但是,var 变量仅在函数内具有局部作用域。 ES6 通过 let/const 引入了本地作用域的扩展,以包含 { 大括号 } 内的片段。简而言之,var 变量在函数内具有局部作用域,但在其他任何地方都具有全局作用域。
let 和 const 引入了块作用域,这使得变量只能在定义它的最接近的 { 大括号 } 集合内可用。这些大括号可以是 for 循环、if-else 条件或任何其他类似 JavaScript 构造的大括号。这样的大括号也称为代码块。
示例:
function addXYZ() { var x = 3; let y = 4; const z = 5; return x + y + z; // 12 } // These log undefined because var, let, and const variables are locally scoped within functions. console.log(x); console.log(y); console.log(z);
let age = 10; // global variable if (age < 18) { let letCandy = 2; // block-scoped variable console.log(`You are entitled to ${letCandy} candies`); } else { var varCandy = 4; // function-scoped variable console.log(`You are entitled to ${varCandy} candies`); } console.log(age); // Logs 10, as age is globally scoped console.log(letCandy); // Throws ReferenceError, as letCandy is block-scoped console.log(varCandy); // Logs 4, as varCandy is globally scoped outside of functions
在后续文章中,我们将讨论词法范围和闭包。感谢您的阅读。
以上是理解 JavaScript 中的作用域的详细内容。更多信息请关注PHP中文网其他相关文章!