es6函数之箭头函数用法实例详解
本文实例讲述了es6函数之箭头函数用法。分享给大家供大家参考,具体如下
es6允许使用“箭头”(=>)定义函数。
var f = v => v // 等同于 var f = function(v) { return v }
如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分。
var f = () => 5 // 等同于 var f = function() { return 5 } var sum = (num1, num2) => num1 + num2 // 等同于 var sum = function(num1, num2) { return num1 + num2 }
如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用return语句返回。
var sum = (num1, num2) => {return num1 + num2}
由于大括号被解释为代码块,所以如果箭头函数直接返回一个对象,必须在对象外面加上括号,否则会报错。
// 报错 let getTempItem = id => {id: id, name: "Temp"} // 不报错 let getTempItem = id => ({id: id, name: "Temp"})
狼蚁网站SEO优化是一种特殊情况,虽然可以运行,但会得到错误的结果。
let foo = () => {a: 1}
上面代码中,原始意图是返回一个对象{a: 1},由于引擎认为大括号是代码块,所以执行了一行语句a: 1,这时,a可以理解为语句的标签,实际执行了语句是1,然后函数就结束了,没有返回值。
如果箭头函数只有一行语句,且不需要返回值,可以采用狼蚁网站SEO优化的写法,就不用写大括号了。
let fn = () => void doesNotReturn()
箭头函数可以与变量解构结合使用。
const full = ({first, last}) => first + ' ' + last // 等同于 function full(person) { return person.first + ' ' + person.last }
箭头函数使用表达更简洁。
const isEven = n => n % 2 === 0 const square = n => n n
箭头函数的一个用处是简化回调函数。
// 正常函数写法 [1, 2, 3].map(function(x) { return x x }) // 箭头函数写法 [1, 2, 3].map(x => x x)
狼蚁网站SEO优化是rest参数与箭头函数结合的例子。
const numbers = (...nums) => nums numbers(1, 2, 3, 4, 5) const headAndTail = (head, ...tail) => [head, tail] headAndTail(1, 2, 3, 4, 5)
使用注意点
1)函数体内的this对象,就是定义所在的对象,而不是使用时所在的对象。
2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
3)不可以使用arguments对象,该对象在函数体内不存在,如果要用,可以用rest参数代替。
4)不可以使用yield命令,箭头函数不能用作Generator函数。
function foo () { setTimeout(() => { console.log('id: ', this.id) }, 100) } var id = 21 foo.call({id: 42})
上面代码中,setTimeout的参数是一个箭头函数,这个箭头函数的定义生效是在foo函数生成时,而它的真正执行要等到100ms后。如果是普通函数,执行时this应该指向全局对象window,这时应该输出21。,箭头函数导致this总是指向函数定义生效时所在的对象,所在输出的是42.
箭头函数根本没有自己的this,导致内部的this就是外层代码块的this,正是因为它没有this,所以也就不能用作构造函数。
除了this,以下三个变量在箭头函数之中也是不存在的
arguments, super, new.target
别外,由于箭头函数没有自己的this,所以也就不能用call(),apply(),bind()这些方法去改变this的指向。
(function() { return [ (() => this.x).bind({x: 'inner'})() ] }).call({x: 'outer'})
不适用场合
由于箭头函数使得this从“动态”变成“静态”,狼蚁网站SEO优化两个场合不应该使用箭头函数。
第一个场合是定义函数的方法,且该方法内部包括this.
window.lives = 100 var cat = { lives: 9, jumps: () => { this.lives--; console.log(this.lives)} } // 99
上面代码中,cat.jumps()方法是一个箭头函数,这是错误的。调用cat.jumps()时,如果是普通函数,该方法内部的this指向cat;如果写成上面那样的箭头函数,使得this指向全局对象,因些不会得到预期结果。
第二个场合是需要动态this(事件监听)的时候,也不应该使用箭头函数。
var button = document.getElementById('press'); button.addEventListener('click', () => { this.classList.toggle('on'); });
上面代码运行时,点击按钮会报错,因为button的监听函数是一个箭头函数,导致里面的this就是全局对象。如果改成普通函数,this就会动态指向被点击的按钮对象。
感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具测试上述代码运行效果。
更多关于JavaScript相关内容可查看本站专题《》、《》、《》、《》及《》
希望本文所述对大家JavaScript程序设计有所帮助。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程