在 JavaScript 中,变量用于存储数据,以便在代码中重复使用。变量可以存储不同类型的数据,比如数字、字符串、布尔值、对象等。下面是有关 JavaScript 变量的详细信息:
1. 变量声明
在 JavaScript 中,可以使用 var
、let
或 const
来声明变量。
var
- 作用域:
var
声明的变量具有函数作用域(function scope),如果在函数外部声明,则具有全局作用域(global scope)。 - 提升:
var
声明的变量会被提升(hoisting)到函数或全局作用域的顶部,但初始化不会被提升。
示例:
function exampleVar() {
console.log(x); // undefined (变量被提升)
var x = 5;
console.log(x); // 5
}
exampleVar();
let
- 作用域:
let
声明的变量具有块级作用域(block scope),即在{}
内部有效。 - 提升:
let
声明的变量会被提升,但不会初始化,不能在声明之前访问(会抛出ReferenceError
)。
示例:
function exampleLet() {
// console.log(y); // ReferenceError: Cannot access 'y' before initialization
let y = 10;
console.log(y); // 10
}
exampleLet();
const
- 作用域:
const
声明的变量也具有块级作用域。 - 不可重新赋值:
const
声明的变量一旦赋值后不能重新赋值,但如果是对象或数组,其属性或元素是可以修改的。 - 提升:
const
变量也会被提升,但不能在声明之前访问。
示例:
function exampleConst() {
// console.log(z); // ReferenceError: Cannot access 'z' before initialization
const z = 20;
console.log(z); // 20
// z = 30; // TypeError: Assignment to constant variable
}
exampleConst();
2. 变量类型
JavaScript 变量可以存储不同类型的数据:
- 基本数据类型:
- 数字(Number):包括整数和浮点数。
- 字符串(String):文本数据。
- 布尔值(Boolean):
true
或false
。 null
:表示“无值”或“空值”。undefined
:表示变量未初始化。- 符号(Symbol):唯一且不可变的原始值(ES6 引入)。
- 复杂数据类型:
- 对象(Object):键值对集合。
- 数组(Array):有序数据集合。
- 函数(Function):可调用的代码块。
示例:
let number = 42; // Number
let string = "Hello"; // String
let boolean = true; // Boolean
let nothing = null; // null
let notDefined; // undefined
let array = [1, 2, 3]; // Array
let object = { name: "Alice", age: 25 }; // Object
let func = function() { return "Hello, World!"; }; // Function
3. 变量作用域
- 全局作用域:在函数外部声明的变量具有全局作用域,能被整个脚本访问。
- 函数作用域:使用
var
在函数内部声明的变量具有函数作用域,只能在该函数内部访问。 - 块级作用域:使用
let
和const
在{}
内部声明的变量具有块级作用域,只能在{}
内部访问。
示例:
let globalVar = "I'm global";
function scopeExample() {
let functionVar = "I'm local to the function";
if (true) {
let blockVar = "I'm local to the block";
console.log(blockVar); // 输出:I'm local to the block
}
console.log(functionVar); // 输出:I'm local to the function
// console.log(blockVar); // ReferenceError: blockVar is not defined
}
scopeExample();
console.log(globalVar); // 输出:I'm global
4. 变量提升(Hoisting)
变量提升是指变量和函数声明会被提升到作用域的顶部,但只有声明会被提升,初始化不会。
示例:
console.log(a); // undefined (变量提升)
var a = 5;
console.log(a); // 5
console.log(b); // ReferenceError: Cannot access 'b' before initialization
let b = 10;
总结
在 JavaScript 中,变量的声明、作用域、类型及其特性(如提升)对代码的行为和结构有很大影响。理解这些概念可以帮助你编写更有效和可维护的代码。