JavaScript 作用域学习笔记
在 JavaScript 中,作用域决定了变量和函数的可见性和生命周期。JavaScript 采用的是词法作用域,也就是静态作用域,即变量和函数的作用域在定义时就确定了。
全局作用域
在 JavaScript 中,没有在函数内部声明的变量和函数都属于全局作用域。全局作用域中的变量可以在任何地方访问,而且生命周期随着页面的关闭而结束。
示例代码:
Copy Codevar globalVar = "I am a global variable";
function globalFunction() {
console.log("I am a global function");
}
console.log(globalVar); // 输出 "I am a global variable"
globalFunction(); // 输出 "I am a global function"
函数作用域
在 JavaScript 中,每个函数都有自己的作用域,函数内部的变量只能在函数内部访问,函数外部无法访问。函数内部可以定义其他函数,内部函数也可以使用外部函数定义的变量和函数。
示例代码:
Copy Codefunction outerFunction() {
var outerVar = "I am an outer variable";
function innerFunction() {
var innerVar = "I am an inner variable";
console.log(innerVar);
console.log(outerVar);
}
innerFunction();
}
outerFunction(); // 输出 "I am an inner variable" 和 "I am an outer variable"
块级作用域
在 ES6 中,引入了 let
和 const
关键字,可以用来声明块级作用域变量,即在花括号 {}
内部声明的变量只能在花括号内部访问,外部无法访问。
示例代码:
Copy Codefunction blockScope() {
if (true) {
let blockVar = "I am a block variable";
console.log(blockVar);
}
console.log(blockVar); // Uncaught ReferenceError: blockVar is not defined
}
blockScope();
使用块级作用域可以避免变量污染和命名冲突,提高代码的可读性和可维护性。