JavaScript中的变量定义和声明

在JavaScript中,变量定义和声明是编程的基础。以下是详细解释:

1. 变量声明方式

var (ES5及之前)

var name = "张三";
var age = 25;

特点:

  • 函数作用域
  • 存在变量提升
  • 可以重复声明

let (ES6+)

let count = 10;
let isActive = true;

特点:

  • 块级作用域
  • 不存在变量提升
  • 不能重复声明
  • 允许暂时性死区

const (ES6+)

const PI = 3.14159;
const API_URL = "https://api.example.com";

特点:

  • 块级作用域
  • 必须初始化赋值
  • 不能重新赋值
  • 对于对象/数组,内容可修改但引用不可变

2. 变量声明示例

// 不同的声明方式
var globalVar = "我是全局变量";
let blockScopedVar = "我是块级作用域变量";
const constantVar = "我是常量";

// 声明后再赋值
let message;
message = "Hello World";

// 多个变量声明
let a = 1, b = 2, c = 3;

// 常量对象
const person = {
    name: "李四",
    age: 30
};
person.age = 31; // ✅ 允许,修改对象属性
// person = {}; // ❌ 报错,不能重新赋值

3. 作用域差异

// var 的函数作用域
function varExample() {
    if (true) {
        var x = 10;
    }
    console.log(x); // 10,在函数内可访问
}

// let/const 的块级作用域
function letExample() {
    if (true) {
        let y = 20;
        const z = 30;
    }
    // console.log(y); // ❌ 报错,y未定义
    // console.log(z); // ❌ 报错,z未定义
}

4. 变量提升

// var 的变量提升
console.log(hoisted); // undefined
var hoisted = "我被提升了";

// 相当于:
var hoisted;
console.log(hoisted);
hoisted = "我被提升了";

// let/const 没有变量提升
// console.log(notHoisted); // ❌ 报错
let notHoisted = "我不会被提升";

5. 最佳实践

// 1. 优先使用 const
const DEFAULT_SETTINGS = {
    theme: "dark",
    language: "zh-CN"
};

// 2. 需要重新赋值时使用 let
let counter = 0;
counter = 1;

// 3. 避免使用 var
// ❌ 不推荐
var oldVariable = "过时写法";

// 4. 变量命名规范
const userName = "张三"; // camelCase
const MAX_SIZE = 100;   // UPPER_CASE for constants

6. 特殊情况

// 未声明直接赋值(不推荐)
undeclaredVar = "我会成为全局变量"; // 严格模式下报错

// 使用严格模式
"use strict";
// undeclaredVar = "value"; // ❌ 报错

// typeof 安全检查
if (typeof someUndefinedVar !== 'undefined') {
    console.log(someUndefinedVar);
}

总结

  • const:优先使用,用于不会重新赋值的变量
  • let:用于需要重新赋值的变量
  • var:避免使用,存在作用域和提升问题
  • 始终在严格模式下编写代码
  • 使用有意义的变量名,遵循命名约定
posted @ 2020-02-25 15:48  阿木隆1237  阅读(280)  评论(0)    收藏  举报