作用域(scope)决定一个名字能在哪些位置使用。JavaScript 主要使用函数作用域和块作用域;let 与 const 只在声明它们的花括号块中有效。
局部变量与参数
函数参数和函数内部声明的变量属于该次调用。另一个函数即使使用相同名字,也拥有不同的变量。
function swap(a, b) {
const temporary = a;
a = b;
b = temporary;
console.log(a, b);
}
let a = 3;
let b = 8;
swap(a, b); // 函数内部输出 8 3
console.log(a, b); // 外部仍是 3 8数字按值传入函数,因此交换局部参数不会改变外部变量。
互动实验
局部作用域与同名变量
访问权限PRO
PRO EXCLUSIVE探索不止于此
尊享 Pro 权益解锁完整互动实验、进阶解析与精选参考答案。
知识测验
题目
调用 swap(a, b) 时,swap() 中的 a 和 外层代码 中的 a 是什么关系?
块作用域与外层变量
在 if、for 或独立花括号中用 let、const 声明的名字,离开该块后就不能访问。声明在所有函数外部的变量属于模块或全局范围,多个函数可以读取它。共享可变状态容易让程序难以追踪,因此应限制它的使用。
let score = 0;
function addScore(points) {
score += points;
}
function getScore() {
return score;
}
addScore(10);
console.log(getScore()); // 10知识测验
题目
希望多个函数共享变量 score,应把它声明在哪里?
动手练习
构建共享计分板
使用一个外层变量保存分数,并通过两个函数集中修改和读取它。
- 在函数外声明 let score = 0。
- 编写 addScore(points) 函数。
- 编写 getScore() 方法并在 外层代码 中验证结果。