ES6变量定义

ES6变量定义

1.ES6简介

ECMA是一个标准,JavaScript是ECMAScript的实现
ES6是ECMAScript的一个版本,是2015年发布的,又叫ES2015

2.let关键字

ES6新增的关键字,用来声明变量。用法类似于var,但是所声明的变量,只在let所在的代码块有效。

var a = [];
    for (var i = 0; i < 10; i++) {
    
    
       a[i] = function(){
    
    
           console.log(i);
       }
}
a[6](); //用var声明变量遇到for循序的大括号是不会形成作用与的,返回值是 10,这里i是全局变量
 var a = [];
    for (let i = 0; i < 10; i++) {
    
    
        a[i] = function () {
    
    
            console.log(i);
        }
    }
    a[6](); //6  i是let声明的,当前的i只在本轮循环中有效,每一个循环中的i其实都是一个新的变量,所以输出的是6
 for (let i = 0; i < 3; i++) {
    
    
       let i = "abc";
       console.log(i);
       //结果:输出3次abc。
		//原因:在代码块中的变量i与for循环中的变量i不在用一个作用域。
    }

2.1不存在变量提升

var 存在变量提升,即变量在声明之前使用,值为undefined。js会将声明语句放在所有的js代码之前执行

在这里插入图片描述

//上图代码就相当于下面的代码变现,声明玩直接使用,还么有赋值,所以为undefined。
var a;
console.log(a);
a=10;

在这里插入图片描述
上图输出时直接报错,所以let不存在变量提升

2.2 暂时性死区

var tmp = 123;
    if(true){
    
    
        tmp = "abc";
        let tmp;
        console.log(tmp);
    }
    //结果:提示错误`Cannot access 'tmp' before initialization`

使用变量时,会先寻找同一作用域下的变量。以上代码中,tmp=abc会优先寻找到下面的let tmplet tmp不存在变量提升,所以提示错误

总结:在代码块中,使用let命令声明变量之前,该变量都是不可用的状态,在语法上,称为“暂时性死区”

2.3 不允许重复声明

let a = "hello";
let a = "word";
console.log(a)
//输出会直接提示错误 , 
function show(a) {
    
    
        let a = 10;
    }
    show(100);
//以上代码中,函数的形参`a`与函数内部的`a`作用域相等,所以会报错。

3.块级作用域

3.1 为什么需要块级作用域

ES5只有全局作用域和局部作用域(函数作用域),没有块级作用域。

  • 缺点1:内部变量可能会覆盖外层的变量

在这里插入图片描述
上面案例中,if代码块外部原意为使用外层的date,内部使用内部的date。但是函数执行后,结果却为undefined,原因是存在变量的提升。导致内部的date覆盖了外部的date变量

扫描二维码关注公众号,回复: 12790870 查看本文章
  • 缺点2:for循环中的计数变量泄露为全局变量。
    在这里插入图片描述
    以上案例中,for·循环中的变量i只是用来作为计数使用,但是for循环执行完成后,它没有消失,而是作为全局变量仍然存在。以后可能不会再使用,造成资源的浪费。

3.2ES6的块级作用域

function show() {
    
    
        let a = "yasuo";
        if (true) {
    
    
            let a = "jianhao"; 
            {
    
    
                let a = "孤儿索"
            }
            console.log(a);//输出为jianhao
        }
        console.log(a);//输出为yasuo
    }
    show();
    //块级作用域下的变量不会对外层的变量造成影响,同时支持多层嵌套。

const

1.基本用法

const也是用来声明变量的,不过它声明的是一个只读的常量。一旦声明,值不可修改。

const PI = 3.1425926;
        alert(PI)
//---------------------------------------
// 如果值被修改了,就会报错
const PI = 3.1425926;
        PI = 3.14;
        alert(PI)

1.2 必须初始化

const PI;
PI = 3.1415926;
alert(PI);
//Missing initializer in const declaration  const声明中缺少初始化式

因为const声明的变量的值不可修改,所以,const一旦声明变量,则必须初始化。

1.3 一般变量名为大写字母

这是一种规范

1.4 他也有块级作用域

const与``let`相同,只会在声明的所在代码块作用域内生效

在这里插入图片描述

1.5 不存在变量的提升

alert(PI);
const PI = 3.1415926;
//报错

1.6 不可重复声明

var PI = "3.14";
 const PI = 3.1415926;

1.7 对于数组和对象中的元素进行修改,不算对常量的改变

const变量保存的变量指向的值的内存地址。对于简单的数据(数值,字符串,布尔值)值保存在变量指向的内存地址。

对于复合数据类型,变量指向的内存地址,只是该对象的地址,其中的内容发生变化不会使该对象的内存地址发生变化。

const obj = {
    
    
	name:"亚索"
}
obj.name = "疾风剑豪";
console.log(obj.name);
//疾风剑豪

猜你喜欢

转载自blog.csdn.net/weixin_53125457/article/details/114034507
今日推荐