ES6入门(1)let和const定义

2019/02/25 23:19 下午 posted in  ES6

在学习vue的时候,涉及到ES6的知识,现在来补充ES6

语法

let a = 1;
const b = 2;
var c = 3;
function geta(){};

var和function

在ES6之前是js是定义变量 和函数 是用varfunction关键字
他们的特性是:
1.var和function存在变量的提前声明
2.var只会提前声明,function既声明又定义
3.全局作用域下,使用var和function声明的变量会给window增加属性

    console.log(a);     // undefined
    console.log(getA);  // getA(){}

    var a = 1;
    function getA(){}

    var a = 2;
    console.log(window.a);// 2
    console.log('getA' in window); // true

let

1.没有变量提前声明
2.不可以重复声明
3.不会给window增加属性

    // console.log(a); 报错 a is not defined
    let a=1;
   // let a=2; // 2.let.html:17 Uncaught SyntaxError: Identifier 'a' has already been declared
    console.log(a);

const

1.变量提前声明
2.不可以重复声明
3.不会给window增加属性
4.const,一旦声明必须赋值
5.const定义的是一个常量,不可以重新赋值

let a;
console.log(a);
a=2;
a=3;
const b=1;
// b=3; 报错

块级作用域

{}:一个{}就是一个块级作用域
在快级作用域下,varfunction声明的变量依然是全局的
在块级作用域下letconst声明的变量是私有的
{}如果想表示一个对象不可以放在行首

   {
        let b=1;
        var a=0;
        function getA(){}
    }
    console.log(a); // 0
    getA(); // getA(){}
    // console.log(b); //  b is not defined
    // for(){}, if(){},对象{}

if(){} 中的function 只会提前声明不会定义,当条件成立,先给函数赋值 代码再执行

if (1){
    var A=1;
    function getAA() {}
}
console.log(A);
console.log(getAA());

for
绑定事件是一个异步的操作 先绑定上函数,当点击的触发的时候再拿出函数执行,这个时候i早已经是for执行完以后的i(=5)

    let list = document.getElementById("list").getElementsByTagName("li");
    for(var i=0;i<list.length;i++){
         list[i].onclick=function () {
             alert(i)
         }
     }
     console.log(i);

1.解决方式,给i增加自定义属性

    let list = document.getElementById("list").getElementsByTagName("li");
    for(var i=0;i<list.length;i++){
        list[i].index = i;
        list[i].onclick=function () {
            alert(this.index)
        }
     }
    console.log(i);

2.闭包
3.使用let定义i

    let list = document.getElementById("list").getElementsByTagName("li");
    for(let i=0;i<list.length;i++){
        list[i].onclick=function () {
            alert(i)
        }
    }
    console.log(i);// i is not defined let 在块级作用域中是私有的,所以这里是没有定义的