在 JavaScript 中,变量声明和作用域是非常重要的概念。
变量声明:
var
:使用var
声明的变量,其作用域在函数内,如果在函数外声明,则为全局变量。存在变量提升现象,即在变量声明之前使用该变量不会报错,但值为undefined
。
function example() {
console.log(a); // undefined
var a = 10;
}
let
:使用let
声明的变量,具有块级作用域,即只在其所在的代码块({}
)内有效。不存在变量提升。
{
let b = 20;
}
console.log(b); // 报错,b 未定义
const
:用于声明常量,其值不能被重新赋值。具有与let
相同的块级作用域,不存在变量提升。
const c = 30;
c = 40; // 报错,不能重新赋值
作用域:
- 全局作用域:在函数外部声明的变量具有全局作用域,可以在整个程序中访问。
- 函数作用域:在函数内部使用
var
声明的变量具有函数作用域,只能在函数内部访问。 - 块级作用域:使用
let
和const
声明的变量具有块级作用域,即在if
语句、for
循环、while
循环等代码块中声明的变量,只在该代码块及其子代码块中有效。
// 全局变量
var globalVar = 'global';
// 局部作用域中的变量
function localScopeExample() {
var localVar = 'local';
// 局部作用域内可以访问这些变量
console.log(localVar); // 输出: 'local'
console.log(globalVar); // 输出: 'global'
// 使用let声明的块级作用域变量
let blockScopedVar = 'block';
// 块级作用域内可以访问这个变量
if (true) {
console.log(blockScopedVar); // 输出: 'block'
}
// 使用const声明的只读变量
const constantValue = 'constant';
// 常量的值不能改变
// 下面的代码会导致运行时错误
// constantValue = 'other value';
}
// 局部作用域外不能访问块级作用域变量
// console.log(blockScopedVar); // 错误: blockScopedVar is not defined
// 调用函数以演示局部作用域
localScopeExample();
这段代码演示了如何在JavaScript中声明变量,包括全局变量、局部变量、块级作用域变量和常量。同时,它还展示了如何在不同的作用域内访问这些变量,并且说明了如何正确使用const
关键字声明不可变的变量。