变量

变量:用关键字 var 来定义变量,用 = 给变量赋值,对大小写敏感(变量名是大小写英文、数字、$_的组合)

定义方法和 C 一样

var x, length;             //"声明"变量(未初始化,值为 undefined)
x = 5; length = 6;
var carname = "Volvo", age = 30,  //"声明"变量同时初始化
	year = 2024;                  //"声明"可以跨行
var x, y, z = 1;           //只对z初始化,z=1, y=undefined, x=5(重新声明变量,该变量的值不会丢失)

JavaScript 中,var 关键字定义的变量可以先使用再声明,而 。

作用域(var vs let)

function myfun(var a int, b int) {
	x = 5;
}
// 这里可以使用 x 变量
{ 
    var x = 2; 
}
// 这里可以使用 x 变量
var x = 10;
{ 
	var x = 2;
    // 这里输出 x 为 2
}
// 这里输出 x 为 2

var x = 10;
{ 
    let x = 2;
    // 这里输出 x 为 2
}
// 这里输出 x 为 10

//应用于循环:
var i = 5;
for (let i = 0; i < 10; i++) {
    //……
}
// 这里输出 i 为 5

使用 var 关键字声明的全局作用域变量属于 window 对象
使用 let 关键字声明的全局作用域变量属于 window 对象:

var carName = "Volvo";
// 可以使用 window.carName 访问变量
let carName = "Volvo"; 
// 不能使用 window.carName 访问变量

变量重置(重复声明)

相同的作用域或块级作用域中:

var x = 2;       // 合法
let x = 3;       // 不合法
{
    var x = 4;   // 合法
    let x = 5   // 不合法
}
let x = 2;       // 合法
let x = 3;       // 不合法

{
    let x = 4;   // 合法
    let x = 5;   // 不合法
}
let x = 2;       // 合法
var x = 3;       // 不合法

{
    let x = 4;   // 合法
    var x = 5;   // 不合法
}

let 关键字在不同作用域,或不同块级作用域中是可以重新声明赋值的:

let x = 2;       // 合法
{
    let x = 3;   // 合法
}
{
    let x = 4;   // 合法
}

变量提升(先使用后声明)

const

const 用于声明一个或多个常量,声明时必须进行初始化,且初始化后值不可再修改:

const PI = 3.141592653589793;
PI = 3.14;      // 报错
const S;        // 报错

const定义常量与使用let 定义的变量相似:

并非完全不能修改:const 的本质是定义了一个引用一个值的常量引用。故使用 const 定义的对象或者数组,其实是可变的:

const car = {type:"Fiat", model:"500", color:"white"}; // 创建常量对象
car.color = "red"; // 修改属性:
car.owner = "Johnson"; // 添加属性

car = {type:"Volvo", model:"EX60", color:"red"}; // 错误!

涉及 const 的变量重置

在相同的作用域或块级作用域中,不能使用 const 关键字来重置 var  let const 关键字声明的变量;

在不同作用域或不同块级作用域中,const 是可以重新声明赋值的