国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript Functions詳解(包含ES6箭頭函數(shù))

894974231 / 735人閱讀

摘要:對象方法當(dāng)用作對象屬性時,函數(shù)稱為方法箭頭函數(shù)中的當(dāng)箭頭函數(shù)與常規(guī)函數(shù)用作對象方法時,有一個重要的行為。這是因?yàn)榈奶幚碓趦蓚€函數(shù)聲明樣式中是不同的。會將函數(shù)移動到其范圍的頂部。變量聲明被提升,但不是值,因此不是函數(shù)。

簡介

JavaScript中的所有內(nèi)容都發(fā)生在函數(shù)中。

函數(shù)是一個代碼塊,可以定義一次并隨時運(yùn)行。

函數(shù)可以選擇接受參數(shù),并返回一個值。

JavaScript中的函數(shù)是對象,一種特殊的對象:函數(shù)對象。

另外,函數(shù)被稱為第一類函數(shù),因?yàn)樗鼈兛梢员毁x值給一個值,它們可以作為參數(shù)傳遞并用作返回值。

句法

讓我們從“舊的”,ES6 / ES2015之前的語法開始。這是一個函數(shù)聲明:

function dosomething(foo) {
  // do something
}

(現(xiàn)在,在ES6 / ES2015世界中,被稱為常規(guī)函數(shù))

函數(shù)可以分配給變量(這稱為函數(shù)表達(dá)式):

const dosomething = function(foo) {
  // do something
}

命名函數(shù)表達(dá)式類似,但在堆棧調(diào)用跟蹤中更好用,這在發(fā)生錯誤時很有用 - 它保存函數(shù)的名稱:

const dosomething = function dosomething(foo) {
  // do something
}

ES6 / ES2015引入了箭頭函數(shù),在使用內(nèi)聯(lián)函數(shù)時,特別適合用作參數(shù)或回調(diào)函數(shù):

const dosomething = foo => {
  //do something
}

箭頭函數(shù)與上面的其他函數(shù)定義有很大的不同,我們稍后會解釋。

參數(shù)

一個函數(shù)可以有一個或多個參數(shù)。

const dosomething = () => {
  //do something
}

const dosomethingElse = foo => {
  //do something
}

const dosomethingElseAgain = (foo, bar) => {
  //do something
}

從ES6 / ES2015開始,函數(shù)可以具有參數(shù)的默認(rèn)值:

const dosomething = (foo = 1, bar = "hey") => {
  //do something
}

這允許您在不填充所有參數(shù)的情況下調(diào)用函數(shù):

dosomething(3)
dosomething()

ES2018引入了參數(shù)的尾隨逗號,這個功能有助于減少因移動參數(shù)時丟失逗號而導(dǎo)致的錯誤(例如,移動中間的最后一個):

const dosomething = (foo = 1, bar = "hey") => {
  //do something
}

dosomething(2, "ho!")

您可以將所有參數(shù)包裝在一個數(shù)組中,并在調(diào)用函數(shù)時使用spread運(yùn)算符:

const dosomething = (foo = 1, bar = "hey") => {
  //do something
}
const args = [2, "ho!"]
dosomething(...args)

當(dāng)使用許多參數(shù)的時候,記住這些參數(shù)可能很困難。這里可以使用對象,解構(gòu)保留參數(shù)名稱:

const dosomething = ({ foo = 1, bar = "hey" }) => {
  //do something
  console.log(foo) // 2
  console.log(bar) // "ho!"
}
const args = { foo: 2, bar: "ho!" }
dosomething(args)
返回值

每個函數(shù)都返回一個值,默認(rèn)情況下為“undefined”。

任何函數(shù)在其代碼行結(jié)束時,或者當(dāng)執(zhí)行流找到return關(guān)鍵字時終止。

當(dāng)JavaScript遇到此關(guān)鍵字時,它退出函數(shù)執(zhí)行并將控制權(quán)交還給其調(diào)用者。

如果傳遞一個值,則該值將作為函數(shù)的結(jié)果返回:

const dosomething = () => {
  return "test"
}
const result = dosomething() // result === "test"

您只能返回一個值。

要_模擬_返回多個值,您可以返回對象文字或數(shù)組,并在調(diào)用時使用解構(gòu)賦值功能。

使用數(shù)組:

使用對象:

嵌套函數(shù)

可以在其他函數(shù)中定義函數(shù):

const dosomething = () => {
  const dosomethingelse = () => {}
  dosomethingelse()
  return "test"
}
嵌套函數(shù)的作用域是外部函數(shù),不能從外部調(diào)用。
對象方法

當(dāng)用作對象屬性時,函數(shù)稱為方法:

const car = {
  brand: "Ford",
  model: "Fiesta",
  start: function() {
    console.log(Started)
  }
}

car.start()
箭頭函數(shù)中的this

當(dāng)箭頭函數(shù)與常規(guī)函數(shù)用作對象方法時,有一個重要的行為。考慮這個例子:

const car = {
  brand: "Ford",
  model: "Fiesta",
  start: function() {
    console.log(Started ${this.brand} ${this.model})
  },
  stop: () => {
    console.log(Stopped ${this.brand} ${this.model})
  }
}

stop()方法不能像你期望的那樣工作。

這是因?yàn)閠his的處理在兩個函數(shù)聲明樣式中是不同的。箭頭函數(shù)中的this指的是封閉函數(shù)上下文,在本例中是window對象

this,使用function()引用宿主對象

這意味著箭頭函數(shù)不適合用于對象方法和構(gòu)造函數(shù)(箭頭函數(shù)構(gòu)造函數(shù)實(shí)際上會在調(diào)用時引發(fā)TypeError)。

IIFE,立即調(diào)用函數(shù)表達(dá)式

IIFE是一個在聲明后立即執(zhí)行的功能:

;(function dosomething() {
  console.log("executed")
})()

您可以將結(jié)果分配給變量:

const something = (function dosomething() {
  return "something"
})()

它們非常方便,因?yàn)槟鸁o需在定義后多帶帶調(diào)用該函數(shù)。

Function 掛載

執(zhí)行代碼之前的JavaScript會根據(jù)某些規(guī)則對其進(jìn)行重新排序。

會將函數(shù)移動到其范圍的頂部。這就是下面例子不會報錯的原因;

dosomething()
function dosomething() {
  console.log("did something")
}

在內(nèi)部,JavaScript在調(diào)用之前移動函數(shù),以及在同一范圍內(nèi)找到的所有其他函數(shù):

function dosomething() {
  console.log("did something")
}
dosomething()

現(xiàn)在,如果你使用命名函數(shù)表達(dá)式,因?yàn)槟阏谑褂米兞浚瑫l(fā)生不同的事情。變量聲明被提升,但不是值,因此不是函數(shù)。

dosomething()
const dosomething = function dosomething() {
  console.log("did something")
}

不會工作:

這是因?yàn)閮?nèi)部發(fā)生的事情是:

const dosomething
dosomething()
dosomething = function dosomething() {
  console.log("did something")
}

“l(fā)et”聲明也是如此。var聲明也不起作用,但是報的不是同樣的錯誤:

這是因?yàn)?b>var聲明被提升并用undefined作為值初始化,而constlet被提升但未初始化。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/97217.html

相關(guān)文章

  • JavaScript Functions詳解包含ES6箭頭函數(shù)

    摘要:對象方法當(dāng)用作對象屬性時,函數(shù)稱為方法箭頭函數(shù)中的當(dāng)箭頭函數(shù)與常規(guī)函數(shù)用作對象方法時,有一個重要的行為。這是因?yàn)榈奶幚碓趦蓚€函數(shù)聲明樣式中是不同的。會將函數(shù)移動到其范圍的頂部。變量聲明被提升,但不是值,因此不是函數(shù)。 簡介 JavaScript中的所有內(nèi)容都發(fā)生在函數(shù)中。 函數(shù)是一個代碼塊,可以定義一次并隨時運(yùn)行。 函數(shù)可以選擇接受參數(shù),并返回一個值。 JavaScript中的函數(shù)是對...

    ConardLi 評論0 收藏0
  • [譯]JavaScript ES6箭頭函數(shù)指南

    摘要:以下例子的目的是使用來展示一個每秒都會更新的時鐘當(dāng)嘗試在的回調(diào)中使用來引用元素時,很不幸,我們得到的只是一個屬于回調(diào)函數(shù)自身上下文的。 前言 胖箭頭函數(shù)(Fat arrow functions),又稱箭頭函數(shù),是一個來自ECMAScript 2015(又稱ES6)的全新特性。有傳聞?wù)f,箭頭函數(shù)的語法=>,是受到了CoffeeScript 的影響,并且它與CoffeeScript中的=>...

    makeFoxPlay 評論0 收藏0
  • ES6 系列之箭頭函數(shù)

    摘要:回顧我們先來回顧下箭頭函數(shù)的基本語法。主要區(qū)別包括沒有箭頭函數(shù)沒有,所以需要通過查找作用域鏈來確定的值。箭頭函數(shù)并沒有方法,不能被用作構(gòu)造函數(shù),如果通過的方式調(diào)用,會報錯。 回顧 我們先來回顧下箭頭函數(shù)的基本語法。 ES6 增加了箭頭函數(shù): let func = value => value; 相當(dāng)于: let func = function (value) { return ...

    hsluoyz 評論0 收藏0
  • 探索ES2015:箭頭函數(shù)(Arrow Functions

    摘要:注意箭頭函數(shù)有幾個使用注意點(diǎn)不可以使用對象,該對象在函數(shù)體內(nèi)不存在。不可以當(dāng)作構(gòu)造函數(shù),也就是說,不可以使用命令,否則會拋出一個錯誤。不可以使用命令,因此箭頭函數(shù)不能用作函數(shù)。 前言 在JavaScript的世界中函數(shù)被譽(yù)為一等公民,每當(dāng)我們需要在JS定義一個新的函數(shù),我們都會毫不猶豫的function() {},也許我們可以開始換一種方式來定義一個函數(shù),也就是本文的主角箭頭函數(shù),一個...

    pkwenda 評論0 收藏0
  • ES6函數(shù)的改動

    摘要:改動函數(shù)的改變不算太大,都是一些其他語言早就有的功能,而一直比較欠缺的,比如函數(shù)參數(shù)默認(rèn)值,任意參數(shù)的表示法,最大的變化應(yīng)該是支持箭頭函數(shù)其他語言稱之為表達(dá)式,一種對匿名函數(shù)的一種簡寫方式,以下來探討一下函數(shù)在中的一些改變默認(rèn)參數(shù)任意參數(shù)操 ES6 functions改動 ????ES6函數(shù)的改變不算太大,都是一些其他語言早就有的功能,而Javascript一直比較欠缺的,比如函數(shù)參數(shù)...

    kk_miles 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<