var callBack=[]; // 这个等于是个闭包,i会累加到3在做运算,所以结果都是6
for(var i=0;i<=2;i++)
{
callBack[i]=function(){
return i*2;
}
}
console.table([
callBack[0](),
callBack[1](),
callBack[2]()
])
var callBacks=[];
for(let j=0;j<=2;j++) //let 作用域为{}号内,结果为0,2,4
{
callBacks[j]=function(){
return j *2;
}
}
console.table([
callBacks[0](),
callBacks[1](),
callBacks[2](),
]);
在Es6中{}可以用来分割作用域
{
function test(){
return 1;
}
console.log(test());
{
function test(){
return 2;
}
console.log(test());
}
}
Es6中箭头函数this指向问题
var person=function(){ //this的指向,是该函数被调用的对象,在当前d是c调用的,所以是c对象中的a
this.a="a",
this.b="b",
this.c={
a:"a++",
d:function(){
return this.a;
}
}
};
console.log(new person().c.d());
var student=function(){ //Es6中this是指向当前对象的实例
this.a="a",
this.b="b",
this.c={
a:"a++",
d:()=>{
return this.a;
},
}
}
console.log(new student().c.d());
Es6中参数赋值,和可扩展参数
function t(x,y,z){
x=x || 2;
y=y || 7;
z=z || 1;
return x+y+z;
}
console.log(t());
function f(x,y,z)
{
if(y==undefined)
{
y=8;
}
if(z==undefined)
{
z=2;
}
return x+y+z;
}
console.log(f(1));
function j(x=5,y=4,z=1)
{
return x+y+z;
}
console.log(j(1,6,4));
function t(...a) //...a扩展运算符,代表的是一个可变参数的列表,并且是个数组
{
var sum=0;
a.forEach(x=>{
sum+=x;
})
return sum;
};
console.log(t(1,2,3));