ES6学习(var let const 的区别)

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}
发布了17 篇原创文章 · 获赞 0 · 访问量 298

猜你喜欢

转载自blog.csdn.net/qq_26059615/article/details/103990235
今日推荐