javascript的作用域是什么_全局和局部作用域有何区别?

JavaScript作用域分为全局、局部和块级三种:全局作用域中变量处处可访问;局部作用域限于函数内部,每次调用新建并销毁;块级作用域由let/const在{}内声明,仅在该代码块有效。

JavaScript 的作用域,简单说就是变量和函数能被访问到的范围。它不是运行时动态决定的,而是在代码写好、函数定义完成时就固定下来的(也就是“词法作用域”)。作用域控制着名字的可见性、生命周期,也避免了不同区域用相同变量名带来的冲突。

全局作用域:处处都能用

标签最外层、或独立 JS 文件顶层声明的变量和函数,就属于全局作用域。它们在页面整个生命周期中都存在,任何地方都能读取(包括所有函数内部)。

  • var a = 10; 写在函数外面 → 全局变量,window.a 也能访问到
  • 没加 var/let/const 直接赋值,比如 b = 20; → 自动挂到 window 上,也是全局
  • 页面关闭时,全局作用域才销毁

局部作用域:只在函数里有效

函数内部用 varletconst 声明的变量,只在该函数体内可访问。每次调用函数,都会新建一个独立的局部作用域,执行完就销毁。

  • 函数内可以读取外部(包括全局)的变量,但外部无法读取函数内的变量
  • 不同函数可以有同名变量,互不影响
  • 嵌套函数时,内层函数能访问外层函数的变量,形成“作用域链”

块级作用域:ES6 新增,靠 letconst

{} 包裹的代码块(如 iffor、纯大括号)本身不构成作用域,但用 letconst 在其中声明的变量,就只在该块内有效。

  • if (true) { let x = 1; } console.log(x); // 报错
  • var 在块中声明仍属函数或全局作用域,不会受 {} 限制
  • 块级作用域让变量生命周期更精准,减少意外覆盖

关键区别一句话总结

全局变量生来就“公开”,哪都能用;局部变量是“私有的”,只服务自己所在的函数;而块级变量更“谨慎”,连一个 if 块都不愿跨出去。