ES6基础
ES6是JavaScript语言的新标准,使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。
ES6基础主要有常量、作用域、箭头函数、默认参数、对象代理等知识点。
1.常量
ES5中常量的写法:
Object.defineProperty(window,"PI2",{
value:3.1415926,
writable:false,
})
console.log(window.PI2)
ES6的写法:用关键字const直接定义
const PI=3.1415926
console.log(PI)
2.作用域
(ES5:)
var callbacks=[];
for(var i=0;i<=2;i++){
callbacks[i]=function(){
return i*2
}
}
console.table([
callbacks[0](),
callbacks[1](),
])
上面这段代码的输出结果为6,6
为什么不是0,2呢?变量i用var声明,这里有个变量提升,也就是说i被放置在for循环之前,而不是for循环中。函数体中构成了闭包,闭包中变量i是个全局变量,作用域为全局,所以callbacks调用时i=6.
(ES6:)
const callbacks2=[];
for(let j=0;j<=2;j++){
callbacks2[j]=function(){
return j*2
}
}
console.table([
callbacks2[0](),
callbacks2[1](),
])
输出结果为0,2
用let生成的变量,有块作用域的概念。此时的闭包取决于当前的块作用域,所以此时的块作用域就是指for循环的循环体,当前的变量值会被保存下来供闭包使用。即每循环一次就重新生成一次新的作用域。
3.箭头函数
ES6中,箭头函数就是函数的一种简写形式,使用括号包裹参数,跟随一个=>,紧接着是函数体,算是JavaScript的语法糖。
(ES5:)
var evens=[1,2,3,4,5];
var odds=evens.map(function(v){
return v+1
});
console.log(odds);
(ES6:)
et evens=[1,2,3,4,5];
let odds=evens.map(v =>v+1);
console.log(odds);
箭头函数和普通函数的区别在于this的绑定,举个例子
(ES5:)
var factory=function(){
this.a='a';
this.b='b';
this.c={
a:'a+',
b:function(){
return this.a
}
}
}
console.log(new factory().c.b());//结果为a+
//this的指向是该函数被调用的对象,哪个对象调用该函数,this就指向哪个对象。b是c调用的,this就指向C。
(ES6:)
var factory=function(){
this.a='a';
this.b='b';
this.c={
a:'a+',
b:() =>{
return this.a
}
}
}
console.log(new factory().c.b());//结果为a
//箭头函数中this的指向是定义时this的指向。
箭头函数中this的指向,避免了this指向不明确的问题。
4.默认参数
(ES5:)
function f(x,y,z){
if(y===undefined){
y=7;
}
if(z===undefined){
z=42;
}
return x+y+z
}
console.log(f(1,3));//46
(ES6:)
function f(x,y=7,z=42){
return x+y+z
}
console.log(f(1,3));//46
5.对象代理
待更……