es6 与es5 的一些区别
- var声明的变量是 全局作用域,(变量提升)
- let声明的变量是 块级作用域 局部的 不能重复声明 不存在变量提升
- const声明变量是 一旦声明 立即初始化 不能重复声明(局部变量)
var 和 let 的一个bug
var a=[]
for(var i=0; i<10; i++){
a[i] = function(){
console.log(i)
}
}
a[6]() // 10 注意var 是全局的 let 局部的
console.log(foo) // undefined
var foo = 2
console.log(bar) // let 不存在变量提升
let bar = 2
var a = 1
var b = 2
---------------------es5-----------------
// var str = "哈哈哈" + a + "嘿嘿嘿" + b // 哈哈哈1嘿嘿嘿2
------------------es6------------------
var str = `hahaha${a}heiheihei${b}` // hahaha1heiheihei2
箭头函数
function(){} ==== ()=>{ this }
这里this指的对象的父级对象window,不是使用时的对象
arguments不能使用
// 字面量方式创建对象
var person1 = {
name:"alice",
age:20,
fav:function(){
console.log(arguments) // Arguments(3) [1, 2, 3]
console.log(this) // 使用时定义的对象 {name: "alice", age: 30, fav: ƒ}
}
fav2:()=>{}
}
es6的单体模式
为了解决箭头函数this的指向问题----->单体模式
function(){} === ()=>{} === (){}
可以使用arguments

对象创建
<script type="text/javascript">
// es5 构造函数的方式创建对象
function Animal(name,age){
this.name = name
this.age = age
}
Animal.prototype.showName = function(){
console.log(this.name)
}
Animal.prototype.showAge = function(){
console.log(this.age)
}
var dog = new Animal("wangwang",18)
console.log(dog) // Animal {name: "wangwang", age: 18}
dog.showName()
dog.showAge()
// es6 方式创建对象
class Animal2{
constructor(name,age){
this.name = name
this.age = age
}
showName(){
console.log(this.name)
}
}
var d = new Animal2("张三",19)
console.log(d) // Animal2 {name: "张三", age: 19}
d.showName() // 张三
</script>