ES6—— LET、CONST

ECMA 简介

1995年,javascript横空出世,解决表单验证问题;

1996年,javascript 发布1.0,1.1版本;

1997年,因为浏览器不同,当时网景公司(javascript),微软(JScript),nombas(scriptease)形成了一个三足鼎立的一个局势,给编程人员带来了极大的不便利(不同浏览器需要不同的代码);于是,程序员们纷纷向ECAM(欧洲计算机制造商协会)提出申请,指定一个标准;于是ECMA在javascript1.1的基础上,发布了ECMAscript; (为啥不叫javascript因为版权问题,而且是ECMA提出来的嘛,给挂个名总是合理的);

1999年,HTML4.0发布,提出异步数据传输方案 web2.0

2008年,chrome V8引擎横空出世

提出了ES4.0  分离除了 ES5.0(09年) 和ES6.0(15年)

ES6—— LET

补充作用域知识: 全局作用域; 函数作用域;块级作用域;

var的缺陷: 变量声明提升,存在作用域泄露问题,可以重复定义相同变量;

if(false){
        var a = 10; // 未执行改语句,但是由于变量声明提升;函数作用域中 a = undefined
    }else{ 
        console.log(a); // a = undefined
    }
    // undefined
    for(var i = 0; i < 100; i++){

    }
    console.log(i); // 100 i只想在循环中使用,作用域泄露;
    
    var a = 100;
    // ...
    var a = 1000; // 代码过多时,可能定义了相同的变量名而不自知,造成不必要的错误

let {块级作用域} 特点: 在块级作用域中定义的变量只会在当前作用域中有用;

    {
        let a = 100;
        var b = 100;
        {
            console.log(a); // a = 100; 
            let c = 100;
        }
        //console.log(c); // 报错;c未被定义;
    }
    console.log(b); // b = 100;
    console.log(a); // 报错,a未被定义; 只在当前作用域有效;

let的变量会存入TDZ(temporal dead zone 暂时性死区中),对变量进行声明后从TDZ中取出;若使用的变量存在TDZ中会报错;

    let x = x; // x 被存入TDZ中,将 x 赋值给 x ;x使用是还在TDZ中,报错;

let不可重复定义变量;

let a = 'a';
let a = 'b'; // 不可重复声明,不存在变量声明提升;

let 让每个块找到自己专属的那个变量;

{
        let a = 'a';
        {
            let a = 'b';
            console.log(a); // b
        }
        console.log(a); // a
}
    let i = 100;
    for(let i = 0; i < 5; i++){
        let i;
        console.log(i); //undefined * 5
        // 三个 i 都不在同一个块级作用域
    }
    console.log(i); // 100
    // 解构拆分
    {
        let i = 100;
        {
            let i = 0;
            while(i++ < 5){
                let i;
                console.log(i); // undefined * 5
            }
        }
        console.log(i); // 100
    }

ES6——CONST 定义常量;

常量为原始值时不可被改变;常量为引用值时可以被改变(地址不变);

不可以被重复定义;

不可以定义但是不赋值(毕竟是常量啊,不赋值对得起这个名字吗!!!)

    const PI = 3.14;
    {
        const PI = Math.PI;
        console.log(PI); //3.141592653589793
    }
    console.log(PI); // 3.14
const people = {
}
people.name = 'angela';
const people; // 不可重复定义 Uncaught SyntaxError: Identifier 'people' has already been declared;
const people; // 报错:定义不赋值 Uncaught SyntaxError: Missing initializer in const declaration

例题:返回一个随机的n位数;

    function random(n) {
        let max = 1;
        for(let i = 0; i < n; i++){
            max *= 10;
        }
        // 首位补一操作
        // return function () {
        //     let rnum = Math.random();
        //     rnum = rnum * 10 >= 1 ? rnum : (rnum * 10 + 1) / 10; 
        //     return parseInt(rnum * max);
        // }

        // 末尾补0操作
        return function () {
            let str = '';
            str += parseInt(max * Math.random());
            let len = n - str.length;
            for(let i = 0; i <len; i++){
                str += '0';
            }
            return str;
        }
    }
    var random8 = random(8);

猜你喜欢

转载自blog.csdn.net/weixin_41265663/article/details/82967247