什么是JS的变量?

在 JavaScript 中,变量用于存储数据,以便在代码中重复使用。变量可以存储不同类型的数据,比如数字、字符串、布尔值、对象等。下面是有关 JavaScript 变量的详细信息:

1. 变量声明

在 JavaScript 中,可以使用 varletconst 来声明变量。

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)truefalse
    • 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 在函数内部声明的变量具有函数作用域,只能在该函数内部访问。
  • 块级作用域:使用 letconst{} 内部声明的变量具有块级作用域,只能在 {} 内部访问。

示例

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 中,变量的声明、作用域、类型及其特性(如提升)对代码的行为和结构有很大影响。理解这些概念可以帮助你编写更有效和可维护的代码。

JavaScript

JavaScript的字面量

上一篇

JavaScript

JavaScript中的所有操作符

下一篇