js箭头函数
ES6标准新增了一种新的函数:Arrow Function(箭头函数)。
为什么叫Arrow Function?因为它的定义用的就是一个箭头
x =>x*x
相当于:
function(x) {
return x*x;
}
箭头函数相当于匿名函数,并且简化了函数定义。箭头函数有两种格式,一种像上面的,只包含一个表达式,连{……}和return都省略掉了。还有一种可以包含多条语句。这个时候就不能省略{……}和return:
x=>{
if(x>0){
return x*x;
}
else {
return - x*x;
}
}
如果参数不是一个,就需要用括号()起来:
//两个参数:
(x,y) => x * x + y * y
//无参数
() => 3.14
//可变参数:
(x,y,...rest) =>{
var i,sum=x+y;
for(i=0;i<rest.length;i++) {
sum += rest[i];
}
return sum;
}
如果要返回一个对象,就要注意,如果是单表达式,要这么写:
//SyntaxError
x =>{foo:x} //因为和函数体的{……}有语法冲突,所以:
//ok
x=>({foo:x})
this
箭头函数看上去是匿名函数的一种简写,但是实际上,箭头函数和匿名函数有个明显的区别:箭头函数内部的this是词法作用域,由上下文确定。由于JavaScript函数对this绑定的错误处理。下面的例子无法得到预期结果:
var obj = {
birth:1990,
getAge:function(){
var b = this.birth;//
var fn = function(){
return new Date().getFullYear() - this.birth;//this指向window或undefined
};
return fn();
}
};
现在,箭头函数完全修复了this的指向,this总是指向词法作用域,也就是外层调用者obj:
var obj = {
birth:1990,
getAge:function () {
var b = this.birth;//
var fn = () => new Date().getFullYear() - this.birth;//this指向obj对象
return fn();
}
};
obj.getAge();//
由于this在箭头函数中已经按照词法作用域绑定了,所以,用call()或者apply()调用箭头函数时,无法对this进行绑定,即传入的第一个参数被忽略:
var obj = {
birth:1990,
getAge:function(year) {
var b = this.birth;//
var fn = (y) =>y-this.birth;//this.birth仍是1990
return fn.call({birth:2000},year);
}
};
obj.getAge(2015);//
js箭头函数的更多相关文章
- 混合开发的大趋势之 一个Android程序员眼中的 React.js 箭头函数,const, PropTypes
转载请注明出处:王亟亟的大牛之路 昨天写了篇React.js的开头之作,讲了讲块级作用域和let,先安利:https://github.com/ddwhan0123/Useful-Open-Sourc ...
- js箭头函数 的 (e) => { } 写法笔记
1. (e) => {} 是ES 6 新语法,默认是Es 5.1,因此在这里设置一下就不会提示红色下划线了 2.使用: (e) => {} , 其实就是function (e){} 的缩 ...
- js(=>) 箭头函数 详细解说 案例大全
ES6标准新增了一种新的函数:Arrow Function(箭头函数). 为什么叫Arrow Function?因为它的定义用的就是一个箭头: x => x * x 上面的箭头函数相当于: fu ...
- js 箭头函数
箭头函数 ES6标准新增了一种新的函数:Arrow Function(箭头函数). x => x * x相当于: function (x) { return x * x; }箭头函数相当于匿名函 ...
- node.js箭头函数使用
ES6允许使用=>定义函数,箭头函数使得表达更加简洁,例如 // 正常函数写法 [1,2,3].map(function (x) { return x * x; }); // 箭头函数写法 [1 ...
- JS箭头函数的this
箭头函数的this看定义他的时候,他的外层有没有函数 有:外层函数的this就是箭头函数的this 无:箭头函数的this就是window obj = {age:18, getAge: ()=> ...
- js 箭头函数不适用的场景
箭头函数虽然方便但也不是每个地方都适用, 箭头函数在开发中可以十分方便的干预 this的指向,在一些情况下,是不需要对this的指向进行干预的,也就不适用箭头函数 1.构造函数的原型方法上 例如:Pe ...
- JS - 箭头函数与 () {} 的作用域
foo () { // ... } 等价于 foo: function () { // ... } foo: () => { // ... } 范例: // 全局 name = 'zhangsa ...
- JS 函数(arguments、箭头函数、bind)
参数 函数内部可用的 arguments 对象来访问函数的实参 注意 在函数递归调用的时候(在某一刻同一个函数运行了多次,也就是有多套实参),那么 arguments 属性的值是最近一次该函数调用时传 ...
随机推荐
- Linux内存管理机制简析
Linux内存管理机制简析 本文对Linux内存管理机制做一个简单的分析,试图让你快速理解Linux一些内存管理的概念并有效的利用一些管理方法. NUMA Linux 2.6开始支持NUMA( Non ...
- 用ping命令简单的测试 延时、抖动、丢包率
在DOS命令状态下输入 :ping 202.105.135.211 -t (连续的对该IP地址执行Ping命令,直到被用户以Ctrl+C中断)就会得到下面的结果:Pinging 202.105.135 ...
- js经验点滴
1.clone(),clone(ture),节点复制,元素复制追加. 2.siblings([expr]):取得一个包含匹配的元素集合中每一个元素的所有唯一同辈元素的元素集合.可以用可选的表达式进行筛 ...
- 1、操作表 ActionSheet
/* --- page1.html ---*/ <ion-navbar *navbar> <ion-title>Tab 1</ion-title> </ion ...
- js判断下拉框改变状态
<script> $('#questSort').change(function(){ //此处写状态改变要实现的功能 var s=$('#questSort').children('op ...
- Hashtable 键值对集合
// Hashtable 键值对集合 一个键对应一个值 Hashtable ht=new Hashtable(); ht.Add(,"张三"); ht.Add(,'男'); ht ...
- select支持多查询,获取分页count
在我们使用mybatis 时,当我们根据分页去查询数据集时,需要传入的参数有page(页码)和size(每页的条数),而我们期望获取到的数据有,小于或等于size的list数据集,同时我们还需要得到一 ...
- 前端路由vue-router介绍
一.前端路由vue-router介绍 Vue-Router 是 Vue.js 官方的路由管理器.它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌.包含的功能有: 嵌套的路由/视图表 模 ...
- Kafka监控利器
开发过程中,kafka几乎是标配的Mq,如果有一个kafka的监控助手,哪就更完美了,常用的kafka监控工具有 KafkaOffsetMonitor .Kafka Manager.Capillary ...
- eclipse spring boot项目部署
选中项目------>右键----->Run As------>Manven bulid-->填写Name:XXX; Goals:clean package -Dmaven.t ...