ES6新特性之变量与箭头函数

ES6变量声明

ES6中新增了let与const来定义变量:

  • var:ES6和ES5中,定义全局变量(varible的缩写)
  • let:定义局部变量,替代var
  • const:定义常量(定义后不可修改)

var:全局变量

{
    var a = 1;
}

console.log(a); //这里的a指的是代码块里的a

上方代码可以输出结果为1,因为var是全局声明的,所以,即使是在区块里声明,但仍在全局起作用

再来看看下面这段代码:

var a = 1;
{
	var a = 2;
}
console.log(a);

输出为2,因为var是全局声明的

总结:用var定义的全部变量,有时候会污染整个js的作用域

let:定义局部变量

var a = 1;
{
	let a = 2;
}
console.log(a);

输出为1,用let声明的变量,只在局部(块级作用域)起作用

let是防止数据污染,我们来看一个经典的for循环的例子

①:用var声明变量

for(var i = 0; i < 10; i++) {
	console.log(i);  //每循环一次,就会在{}所在的块级作用域中,重新定义一个新的i
}
console.log(i);

上方代码可以正常打印结果,且最后一行结果是10,说明定义的变量i是在全局起作用的

①:用let声明变量

for(let i = 0; i < 10; i++) {
	console.log(i); 
}
console.log(i);

上面的最后一行无法打印结果,因为let定义的变量有块级作用域

**总结:**我们要习惯用let声明,减少var声明带来的污染全局空间

const:定义常量

在程序开发中,有些变量是希望声明后,在业务层就不再发生变化,因此可以用const来定义

好处:const定义的常量不会被修改

注意:用const声明的变量,只在局部(块级作用域)起作用

let和const的作用

  • 禁止重复声明
  • 支持块级作用域
  • 控制修改

相反,用var声明的变量,可以重复声明,没有块级作用域,不能限制

ES6箭头函数

定义和调用函数:(传统写法)

function fn1 (a,b) {
    return a + b;
}
console.log(fn1(1,2));

定义和调用函数:(ES6)

var fn2 = (a,b) =>  a + b;

console.log(fn2(1,2));

二者的效果是一样的

在箭头函数中,如果方法体内不止一句话,那就需要在方法体外边加上括号{} 例如:

var fn2 = (a,b) =>  {
    console.log('haha');
    return a + b;
}

console.log(fn2(1,2));

从上面的箭头函数中,我们可以很清晰的找到方法名,参数名,方法体

上方代码中:

  • 如果只有一个参数,则()可以省略
  • 如果方法内只有一句话,则{} 可以省略,但前提是这条语句必须是return

this指向

箭头函数只是为了写起来更酷吗?当然不是,它含有很大一个作用就是与this的指向有关

ES5中,this指向的是函数被调用的对象,而ES6的箭头函数中,this指向的是函数被定义时

简单来说,箭头函数的this,是不会变的,是永远绑定在当前的环境下

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大恐龙的小弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值