在学习vue的时候,涉及到ES6的知识,现在来补充ES6
语法
let a = 1;
const b = 2;
var c = 3;
function geta(){};
var和function
在ES6之前是js是定义变量 和函数 是用var
和function
关键字
他们的特性是:
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; 报错
块级作用域
{}
:一个{}就是一个块级作用域
在快级作用域下,var
和function
声明的变量依然是全局的
在块级作用域下let
和const
声明的变量是私有的
{}
如果想表示一个对象不可以放在行首
{
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 在块级作用域中是私有的,所以这里是没有定义的