var let const 的区别
var
var声明的变量可重新赋值和重复定义
var price = 100; //var声明的变量可重新赋值和重复定义
price = 200;
console.log(price);
var price = 100; //var声明的变量可重新赋值和重复定义
var price = 200;
console.log(price);
以上两端代码在控制台显示的结果均为200
- var的作用域: function scope (在函数中创建的var变量只能在函数中作用,未在函数中创建的var变量一律为全局变量)
var price = 100;
var count = 10;
if (count > 5) {
var discount = price * 0.6;
console.log(`The discount is ${discount}`);
}
控制台的结果:60
注意:此时discount的值可在大括号外部直接访问,因为此时其不属于任何函数,故其为全局变量
let
- let作用域:block scope (块级作用域,即在一对大括号内声明的let变量只在大括号内有效)
var price = 100;
var count = 10;
if (count > 5) {
let discount = price * 0.6;
console.log(`The discount is ${discount}`);
}
此时discount的值在外部不可直接访问
var price = 100;
var count = 10;
let discount = 90;
if (count > 5) {
let discount = price * 0.6;
}
在控制台访问discount时,发现其值为90。因为if语句外部的let是全局变量,我们直接访问到的是全局变量。
- 不可在同一作用域中重复声明但可重新赋值
let discount = 90;
discount = 100;
此时在控制台访问discount,其值为100
const
- 作用域同let
var price = 100;
var count = 10;
if (count > 5) {
count discount = price * 0.6;
console.log(`The discount is ${discount}`);
}
此时discount的值在外部不可直接访问
- 不可在同一作用域中重复声明且不可重新赋值,但若作为对象,则可以改变其中的属性
const person = {
name: 'Jelly',
age:20
}
person.age = 21;
在控制台中输入 person,得到
{name: "Jelly", age: 21}
若不想使其属性被改变,可使用ES5中的Object.freeze()方法
const person = {
name: 'Jelly',
age:20
}
Object.freeze(person)
person.age = 21;
在控制台输入 person,得到
{name: "Jelly", age: 20}
newnewrookie
发布了17 篇原创文章 · 获赞 0 · 访问量 299
私信
关注