最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

es6函數(shù)之箭頭函數(shù)用法實(shí)例詳解

 更新時(shí)間:2020年04月25日 14:12:04   作者:wangliang_001  
這篇文章主要介紹了es6函數(shù)之箭頭函數(shù)用法,結(jié)合實(shí)例形式詳細(xì)分析了es6箭頭函數(shù)基本功能、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了es6函數(shù)之箭頭函數(shù)用法。分享給大家供大家參考,具體如下:

es6允許使用“箭頭”(=>)定義函數(shù)。

var f = v => v
// 等同于
var f = function(v) {
 return v
}

如果箭頭函數(shù)不需要參數(shù)或需要多個(gè)參數(shù),就使用一個(gè)圓括號(hào)代表參數(shù)部分。

var f = () => 5
// 等同于
var f = function() {
 return 5
}

var sum = (num1, num2) => num1 + num2
// 等同于
var sum = function(num1, num2) {
 return num1 + num2
}

如果箭頭函數(shù)的代碼塊部分多于一條語(yǔ)句,就要使用大括號(hào)將它們括起來(lái),并且使用return語(yǔ)句返回。

var sum = (num1, num2) => {return num1 + num2}

由于大括號(hào)被解釋為代碼塊,所以如果箭頭函數(shù)直接返回一個(gè)對(duì)象,必須在對(duì)象外面加上括號(hào),否則會(huì)報(bào)錯(cuò)。

// 報(bào)錯(cuò)
let getTempItem = id => {id: id, name: "Temp"}
// 不報(bào)錯(cuò)
let getTempItem = id => ({id: id, name: "Temp"})

下面是一種特殊情況,雖然可以運(yùn)行,但會(huì)得到錯(cuò)誤的結(jié)果。

let foo = () => {a: 1}

上面代碼中,原始意圖是返回一個(gè)對(duì)象{a: 1},但是由于引擎認(rèn)為大括號(hào)是代碼塊,所以執(zhí)行了一行語(yǔ)句a: 1,這時(shí),a可以理解為語(yǔ)句的標(biāo)簽,因此實(shí)際執(zhí)行了語(yǔ)句是1,然后函數(shù)就結(jié)束了,沒有返回值。

如果箭頭函數(shù)只有一行語(yǔ)句,且不需要返回值,可以采用下面的寫法,就不用寫大括號(hào)了。

let fn = () => void doesNotReturn()

箭頭函數(shù)可以與變量解構(gòu)結(jié)合使用。

const full = ({first, last}) => first + ' ' + last
// 等同于
function full(person) {
 return person.first + ' ' + person.last
}

箭頭函數(shù)使用表達(dá)更簡(jiǎn)潔。

const isEven = n => n % 2 === 0
const square = n => n * n

箭頭函數(shù)的一個(gè)用處是簡(jiǎn)化回調(diào)函數(shù)。

// 正常函數(shù)寫法
[1, 2, 3].map(function(x) {
 return x * x
})
// 箭頭函數(shù)寫法
[1, 2, 3].map(x => x * x)

下面是rest參數(shù)與箭頭函數(shù)結(jié)合的例子。

const numbers = (...nums) => nums

numbers(1, 2, 3, 4, 5)

const headAndTail = (head, ...tail) => [head, tail]

headAndTail(1, 2, 3, 4, 5)

使用注意點(diǎn)

1)函數(shù)體內(nèi)的this對(duì)象,就是定義所在的對(duì)象,而不是使用時(shí)所在的對(duì)象。
2)不可以當(dāng)作構(gòu)造函數(shù),也就是說(shuō),不可以使用new命令,否則會(huì)拋出一個(gè)錯(cuò)誤。
3)不可以使用arguments對(duì)象,該對(duì)象在函數(shù)體內(nèi)不存在,如果要用,可以用rest參數(shù)代替。
4)不可以使用yield命令,因此箭頭函數(shù)不能用作Generator函數(shù)。

function foo () {
 setTimeout(() => {
 console.log('id: ', this.id)
 }, 100)
}

var id = 21

foo.call({id: 42})

上面代碼中,setTimeout的參數(shù)是一個(gè)箭頭函數(shù),這個(gè)箭頭函數(shù)的定義生效是在foo函數(shù)生成時(shí),而它的真正執(zhí)行要等到100ms后。如果是普通函數(shù),執(zhí)行時(shí)this應(yīng)該指向全局對(duì)象window,這時(shí)應(yīng)該輸出21。但是,箭頭函數(shù)導(dǎo)致this總是指向函數(shù)定義生效時(shí)所在的對(duì)象,所在輸出的是42.

箭頭函數(shù)根本沒有自己的this,導(dǎo)致內(nèi)部的this就是外層代碼塊的this,正是因?yàn)樗鼪]有this,所以也就不能用作構(gòu)造函數(shù)。

除了this,以下三個(gè)變量在箭頭函數(shù)之中也是不存在的:

arguments, super, new.target

別外,由于箭頭函數(shù)沒有自己的this,所以當(dāng)然也就不能用call(),apply(),bind()這些方法去改變this的指向。

(function() {
 return [
 (() => this.x).bind({x: 'inner'})()
 ]
}).call({x: 'outer'})

不適用場(chǎng)合

由于箭頭函數(shù)使得this從“動(dòng)態(tài)”變成“靜態(tài)”,下面兩個(gè)場(chǎng)合不應(yīng)該使用箭頭函數(shù)。

第一個(gè)場(chǎng)合是定義函數(shù)的方法,且該方法內(nèi)部包括this.

window.lives = 100
var cat = {
 lives: 9,
 jumps: () => { this.lives--; console.log(this.lives)}
}

// 99

上面代碼中,cat.jumps()方法是一個(gè)箭頭函數(shù),這是錯(cuò)誤的。調(diào)用cat.jumps()時(shí),如果是普通函數(shù),該方法內(nèi)部的this指向cat;如果寫成上面那樣的箭頭函數(shù),使得this指向全局對(duì)象,因些不會(huì)得到預(yù)期結(jié)果。

第二個(gè)場(chǎng)合是需要?jiǎng)討B(tài)this(事件監(jiān)聽)的時(shí)候,也不應(yīng)該使用箭頭函數(shù)。

var button = document.getElementById('press');
button.addEventListener('click', () => {
 this.classList.toggle('on');
});

上面代碼運(yùn)行時(shí),點(diǎn)擊按鈕會(huì)報(bào)錯(cuò),因?yàn)閎utton的監(jiān)聽函數(shù)是一個(gè)箭頭函數(shù),導(dǎo)致里面的this就是全局對(duì)象。如果改成普通函數(shù),this就會(huì)動(dòng)態(tài)指向被點(diǎn)擊的按鈕對(duì)象。

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運(yùn)行工具http://tools.jb51.net/code/HtmlJsRun測(cè)試上述代碼運(yùn)行效果。

更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《JavaScript常用函數(shù)技巧匯總》、《javascript面向?qū)ο笕腴T教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 循環(huán) vs 遞歸淺談

    循環(huán) vs 遞歸淺談

    本文代碼使用 JavaScript。 一些同學(xué)對(duì)遞歸的理解還停留在“是一種求階乘比循環(huán)低效的方法”。但其實(shí)遞歸和循環(huán)處理的問(wèn)題是不同。拿“遍歷數(shù)組”這個(gè)問(wèn)題來(lái)說(shuō):循環(huán)適合同一維度(單層長(zhǎng)度不限)上的遍歷,而遞歸則適合跨維度(層數(shù)不限)的遍歷。
    2013-02-02
  • 微信小程序?qū)㈨?yè)面按鈕懸浮固定在底部的實(shí)現(xiàn)代碼

    微信小程序?qū)㈨?yè)面按鈕懸浮固定在底部的實(shí)現(xiàn)代碼

    這篇文章主要介紹了微信小程序?qū)㈨?yè)面按鈕懸浮固定在底部的實(shí)現(xiàn)代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • js+html5實(shí)現(xiàn)復(fù)制文字按鈕

    js+html5實(shí)現(xiàn)復(fù)制文字按鈕

    這篇文章主要為大家詳細(xì)介紹了js+html5實(shí)現(xiàn)復(fù)制文字按鈕,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • javascript作用域容易記錯(cuò)的兩個(gè)地方分析

    javascript作用域容易記錯(cuò)的兩個(gè)地方分析

    javascript作用域容易記錯(cuò)的兩個(gè)地方分析,學(xué)習(xí)js的朋友可以參考下
    2012-06-06
  • 用原生 JS 實(shí)現(xiàn) innerHTML 功能實(shí)例詳解

    用原生 JS 實(shí)現(xiàn) innerHTML 功能實(shí)例詳解

    這篇文章主要介紹了用原生 JS 實(shí)現(xiàn) innerHTML 功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • zepto中使用swipe.js制作輪播圖附swipeUp,swipeDown不起效果問(wèn)題

    zepto中使用swipe.js制作輪播圖附swipeUp,swipeDown不起效果問(wèn)題

    Swipe JS 是一個(gè)輕量級(jí)的移動(dòng)滑動(dòng)組件,支持 1:1 的觸摸移動(dòng),阻力以及防滑性能都不錯(cuò),可以讓移動(dòng)web應(yīng)用展現(xiàn)更多的內(nèi)容,能解決我們對(duì)于移動(dòng)Web對(duì)滑動(dòng)的需求。下面小編給大家介紹zepto中使用swipe.js制作輪播圖附swipeUp,swipeDown不起效果問(wèn)題,需要朋友可以參考下
    2015-08-08
  • javaScript合并對(duì)象的多種方式及知識(shí)擴(kuò)展

    javaScript合并對(duì)象的多種方式及知識(shí)擴(kuò)展

    眾所周知JavaScript中有多種方法可以合并對(duì)象,下面這篇文章主要給大家介紹了關(guān)于javaScript合并對(duì)象的多種方式及知識(shí)擴(kuò)展,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • JavaScript中new操作符的原理與實(shí)現(xiàn)詳解

    JavaScript中new操作符的原理與實(shí)現(xiàn)詳解

    你知道new嗎?你知道new的實(shí)現(xiàn)原理嗎?你能手寫new方法嗎?不要擔(dān)心,這篇文件就來(lái)帶大家深入了解一下JavaScript中的new操作符,感興趣的小伙伴可以學(xué)習(xí)一下
    2022-10-10
  • 教你如何解密js/vbs/vbscript加密的編碼異處理小結(jié)

    教你如何解密js/vbs/vbscript加密的編碼異處理小結(jié)

    教你如何解密js/vbs/vbscript加密的編碼異處理加密代碼 是一篇非常不錯(cuò)的加密解密原理,希望大家仔細(xì)研究
    2008-06-06
  • textarea支持圖形編輯的實(shí)現(xiàn)方法

    textarea支持圖形編輯的實(shí)現(xiàn)方法

    本來(lái)以為只有iframe支持編輯了,今天突然發(fā)現(xiàn)textarea也支持編輯 :( 是不是我太愚鈍了? textarea不能用innerHTML來(lái)插入html,而用appendChild 這樣的話稍微修改下,評(píng)論等簡(jiǎn)單的textarea的表情插入就可以直接顯示出來(lái)了 而不是只顯示emot了 比較實(shí)用標(biāo)題起的確切,但如果叫“現(xiàn)textarea支持編輯”似乎更廢話
    2008-03-03

最新評(píng)論

徐闻县| 汝南县| 溆浦县| 东明县| 长沙市| 皮山县| 青浦区| 罗田县| 元氏县| 浦东新区| 新郑市| 靖宇县| 洮南市| 霍城县| 尼玛县| 呼图壁县| 枞阳县| 五家渠市| 新竹市| 镇原县| 牟定县| 临泽县| 东乡族自治县| 华池县| 谢通门县| 湟源县| 迁西县| 大田县| 北安市| 岫岩| 宜章县| 霍林郭勒市| 岳池县| 沈丘县| 岫岩| 交城县| 常熟市| 高淳县| 虎林市| 铁岭县| 乌拉特后旗|