JavaScript作用域指标识符可被访问的范围,分全局作用域(script顶层声明,挂载window,生命周期长)和函数作用域(函数内声明,调用时创建,执行完销毁),块级作用域(ES6,{}内let/const)与函数作用域并列。
JavaScript作用域是指变量、函数等标识符在代码中能够被访问的范围。它决定了某个变量在哪些地方能读、能写,哪些地方根本“看不见”。理解作用域是避免报错、防止意外覆盖、写出可维护代码的基础。
全局作用域是最外层的作用域,不属于任何函数或块级结构。它在页面加载时创建,关闭页面时销毁。
var、let、const)都属于全局作用域window 对象的属性,比如 var a = 1 等价于 window.a = 1
b = 2)也会挂到 window 上,形成隐式全局变量,应避免函数作用域(也叫局部作用域)只存在于函数体内,每次调用函数都会新建一个独立的作用域。
var、let、const 声明的变量,仅在该函数内可访问全局作用域和函数作用域的核心差异体现在三方面:
function 大括号内ES6 引入了块级作用域(由 {} 包裹,配合 let / const),它和函数作用域是并列关系,不是子集。比如 if 或 for 里的 let x = 1,只在该 {} 内有效,不归函数作用域“管”——这点常被误认为是函数作用域的一部分。