1、JS基本变量
1-1 全局变量和局部变量
在仅有var时,分为全局变量和局部变量
- 全局变量–var在函数外声明的变量–在任何位置都能进行访问
- 局部变量–var在函数内声明的变量–在被声明的函数内进行访问
1-2 块作用域
使用let关键字声明拥有块作用域的变量
-
在块{ }中声明的变量在快外无法访问
var x = 10; //此时x = 10 { let x = 2; // 此时x = 2 } //此时x = 10
1-3 var和let的区别
-
循环作用域中
-
var: 声明了一个全局变量,此后i值会被后面值进行覆盖而发生相应的改变
for (var i = 0; i < 10; i++) { setTimeout(() => { console.log(i); //输出10个10 }, 1000); }
-
let: 声明一个局部变量,块级作用域。
for (let i = 0; i < 10; i++) { setTimeout(() => { console.log(i); //输出0,1,2,3,4,5,6,7,8,9 }, 1000); }
- 当前的i仅仅在本轮的循环中有效,每一次循环的值都是不同的局部变量
- 每一次循环的变量都是重新声明的,如何得知上一次循环的值?—答:JS的引擎内部会记住上一轮循环的值,初始化本轮变量时在上一轮的基础上进行计算
-
-
函数作用域
- 相同:均含有函数作用域、全局作用域
- 不同
- var定义的全局变量属于window对象
- let定义的全局变量不属于window对象
-
重新声明
-
var可以重新声明同一个变量(任何位置均可)
-
let在相同的作用域和块中不可以重新声明同一变量,在不同的作用域和块中可以let进行重新声明
-
let和var不可以同时声明同一个变量(相同的作用域和块)
-
-
提升变量
-
var声明的变量会进行提升
// 在此处,您可以使用 carName var carName;
-
let声明的变量不会进行提升
// 在此不可以使用 carName let carName;
-
1-4 Const
-
const基本理解
- const定义的变量不能进行重新赋值,与let相似。
- const声明变量时需要和赋值同时进行:const PI = 3.14159265359;
-
可以改与不可改
-
不可以改
- 原始值不可以进行修改。原因:const不是真正的常数(没有定义常量值,但是定义了对值的常量引用),我们不能改变原始值但是可以改变常量对象的属性
- 不可以为常量对象赋值
- 不可以为常量数组赋值
-
可以改
-
常量对象,可以修改常量对象的属性
// 创建 const 对象: const car = { type:"porsche", model:"911", color:"Black"}; // 更改属性: car.color = "White"; // 添加属性: car.owner = "Bill";
-
常量数组,可以更改常量数组的元素
// 创建常量数组: const cars = ["Audi", "BMW", "porsche"]; // 更改元素: cars[0] = "Honda"; // 添加元素: cars.push("Volvo");
-
-
-
重新声明
-
同一作用域或块
- 已有的var、let变量不可以重新声明或赋值给const
- 已有的const变量不可以重新声明或赋值给var或let
-
不同的作用域或块
-
const重新声明是可以的
const x = 2; // 允许 { const x = 3; // 允许} { const x = 4; // 允许}
-
-
-
提升
- var会提升
- const变量和let变量不会进行提升,不能在声明之前进行使用