全局变量在函数外声明,可被整个脚本访问;局部变量在函数内用var/let/const声明,仅限函数内使用,且let/const还受块级作用域限制。

区分全局和局部变量,关键看变量在哪声明、用什么关键字声明,以及它能不能被函数外的代码访问。
看声明位置:函数外面 vs 函数里面
在最外层(<script></script>标签内、函数外)直接写的变量,就是全局变量。比如:
let name = "张三";<br>var age = 25;<br>const city = "北京";
这些变量在整个脚本里任何地方都能读取或修改。
而写在函数内部的变量,默认属于局部变量,比如:
function sayHello() {<br> let greeting = "你好";<br> console.log(greeting); // ✅ 可以用<br>}<br>console.log(greeting); // ❌ 报错:greeting is not defined看声明方式:var/let/const 和有没有关键字
用 var、let、const 在函数内声明,一定是局部变量;但要注意一种特殊情况:
-
var在函数内不加关键字直接赋值,会变成全局变量(不推荐):function fn() { x = 100; }→x成了全局变量 -
let和const不加关键字直接赋值会报错,不会意外创建全局变量 - 函数的形参(如
function test(a, b)中的a、b)也属于局部变量
看作用范围:能不能跨函数访问
全局变量:所有函数内外都能访问,比如 window.name(浏览器中)可以随时调用。
局部变量:只在自己所在的函数体内有效,不同函数之间互不影响。即使名字一样,也不会冲突:
let score = 90;<br>function math() {<br> let score = 85;<br> console.log(score); // 输出 85(局部)<br>}<br>function english() {<br> let score = 92;<br> console.log(score); // 输出 92(另一个局部)<br>}<br>math(); english();<br>console.log(score); // 输出 90(全局)额外注意块级作用域(ES6+)
let 和 const 在 {} 内声明时,还会有更小的作用域——块级作用域:
if (true) {<br> let blockVar = "仅限这里";<br> var functionVar = "会被提升到函数顶部";<br>}<br>console.log(blockVar); // ❌ 报错<br>console.log(functionVar); // ✅ 可以(如果是函数内,就属于函数作用域)所以 let/const 声明的变量,不仅受函数限制,还受 {} 限制;var 则只认函数边界。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











