Javascript 编程基础(2)基础知识 | 2.2、变量

一、变量

1、变量声明方式

JavaScript 提供了三种主要的变量声明方式:

1.1、var (ES5 及之前)

var name = "John";
  • 函数作用域
  • 存在变量提升(hoisting)
  • 可重复声明
  • 全局声明会成为 window 对象的属性

1.2、let (ES6+)

let age = 30;
  • 块级作用域
  • 不存在变量提升
  • 不可重复声明
  • 不会成为 window 对象的属性

1.3、const (ES6+)

const PI = 3.14159;
  • 块级作用域
  • 声明时必须初始化
  • 不可重新赋值(但对于对象和数组,内容可修改)
  • 其他特性与 let 相同

2、变量作用域

2.1、全局作用域

在任何函数或代码块之外声明的变量拥有全局作用域。

var globalVar = "I'm global";

2.2、函数作用域

使用 var 在函数内声明的变量只在函数内可见。

function test() {
  var functionScoped = "Inside function";
}

2.3、块级作用域

使用 letconst 在代码块({})中声明的变量只在该块内可见。

if (true) {
  let blockScoped = "Inside block";
}

3、变量提升

JavaScript 引擎在执行代码前会先处理变量声明:

console.log(x); // undefined
var x = 5;

等同于:

var x;
console.log(x); // undefined
x = 5;

注意:

  • letconst 也存在提升,但存在"暂时性死区"(TDZ),在声明前访问会报错
  • 只有声明被提升,赋值不会被提升

4、原始类型 vs 引用类型

4.1、原始类型(按值传递)

  • String, Number, Boolean, Null, Undefined, Symbol, BigInt
  • 直接存储在栈内存中
  • 赋值是值的拷贝
let a = 10;
let b = a; // b 是 a 的副本
a = 20;
console.log(b); // 仍然是 10

4.2、引用类型(按引用传递)

  • Object, Array, Function
  • 存储在堆内存中,变量保存的是引用地址
  • 赋值是引用地址的拷贝
let obj1 = { name: "John" };
let obj2 = obj1; // obj2 和 obj1 指向同一个对象
obj1.name = "Jane";
console.log(obj2.name); // "Jane"

5、变量命名规范

  • 区分大小写
  • 可以包含字母、数字、下划线(_)和美元符号($)
  • 不能以数字开头
  • 不能使用保留字作为变量名
  • 推荐使用驼峰命名法(camelCase)
  • 常量通常使用全大写加下划线(SCREAMING_SNAKE_CASE)

6、最佳实践

  • 优先使用 const:默认使用 const,只有在需要重新赋值时才使用 let
  • 避免使用 var:除非有特殊需求,否则使用 letconst
  • 初始化变量:声明时尽量初始化变量
  • 有意义的命名:变量名应清晰表达其用途
  • 避免全局变量:减少全局变量的使用,防止命名冲突
  • 使用严格模式"use strict" 可以帮助避免一些常见的错误
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值