国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【JavaScript】深度理解js的函數(shù)(function、Function)

這篇具有很好參考價值的文章主要介紹了【JavaScript】深度理解js的函數(shù)(function、Function)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

簡言

學了這么久的JavaScript,函數(shù)在JavaScript中最常用之一,如果你不會函數(shù),你就不會JavaScript。
函數(shù)就是Function對象,一個函數(shù)是可以通過外部代碼調(diào)用的一個“子程序”,它是頭等(first-class)對象,因為它們可以像任何其他對象一樣具有屬性和方法。瞧瞧它的定義,注定它能做很多事情。
**函數(shù)是函數(shù)名、參數(shù)和函數(shù)體組成,然后由function聲明。**我們一般說函數(shù)是指普通函數(shù),還有另一種函數(shù)叫做生成器函數(shù),這個生成器比較比較高級,生成器函數(shù)在執(zhí)行時能暫停,后面又能從暫停處繼續(xù)執(zhí)行,這里不展開描述。

函數(shù)

在 JavaScript 中,每個函數(shù)其實都是一個Function對象。函數(shù)默認返回undefined

定義函數(shù)

聲明一個函數(shù)(Function對象)有很多種方式。如果一個函數(shù)中沒有使用 return 語句,則它默認返回undefined。要想返回一個特定的值,可以使用return 返回。

function聲明

由function聲明的函數(shù),函數(shù)名會提升這個作用域的頂部,即在函數(shù)定義前也能使用。

function name([param[, param[, ... param]]]) { statements }
  • name 函數(shù)名。
  • param 傳遞給函數(shù)的參數(shù)的名稱。
  • statements 組成函數(shù)體的聲明語句。

函數(shù)表達式

由函數(shù)表達式創(chuàng)建的函數(shù),函數(shù)名不會會提升,即必須在創(chuàng)建之后使用。

var myFunction = function name([param[, param[, ... param]]]) { statements }
  • name 函數(shù)名,可以省略,省略了后是匿名函數(shù)。
  • param 傳遞給函數(shù)的參數(shù)的名稱。
  • statements 組成函數(shù)體的聲明語句。

立即調(diào)用函數(shù)(IIFE)

當函數(shù)只使用一次時,通常使用IIFE (Immediately Invokable Function Expressions)。意思是當這個js文件被執(zhí)行時調(diào)用一次。

(function () {
  statements;
})();
  • statements 組成函數(shù)體的聲明語句。

箭頭函數(shù)表達式(=>)

箭頭函數(shù)是函數(shù)

var fn = ([param] [, param]) => { statements } param => expression
  • param 參數(shù)名稱。
    零參數(shù)需要用 () 表示。只有一個參數(shù)時不需要括號。(例如 foo => 1)
  • statements or expression
    多個聲明 statements 需要用大括號括起來,而單個表達式時則不需要。表達式 expression 也是該函數(shù)的隱式返回值。

Function構(gòu)造函數(shù) (不推薦)

函數(shù)(Function對象)可以用 new 操作符創(chuàng)建。
把 Function 的構(gòu)造函數(shù)當作函數(shù)一樣調(diào)用 (不使用 new 操作符) 的效果與作為 Function 的構(gòu)造函數(shù)調(diào)用一樣。

new Function (arg1, arg2, ... argN, functionBody)
  • arg1, arg2, … argN
    函數(shù)使用零個或多個名稱作為正式的參數(shù)名稱。每一個必須是一個符合有效的 JavaScript 標識符規(guī)則的字符串或用逗號分隔的字符串列表,例如“x”,“theValue”或“a,b”。

  • functionBody
    一個構(gòu)成的函數(shù)定義的,包含 JavaScript 聲明語句的字符串。

函數(shù)參數(shù)

函數(shù)參數(shù)(形參)一個重要的概念,它是函數(shù)體與外面作用域交互的媒介或橋梁。普通的參數(shù)由js各種類型定義,除此之外,它還有this、剩余參數(shù)和arguments對象。

形參

普通的參數(shù)由js各種類型定義,定義的參數(shù)可以在函數(shù)內(nèi)使用,想傳啥就傳啥。
調(diào)用傳參時,則按你定義參數(shù)的順序傳。

function fnParams(
  name,
  age = 18,
  object = {
    label: 'object形參',
  },
  fn = () => {},
  date = new Date(),
  arr = []
) {
  console.log(name, age, object, fn, date, arr)
}
fnParams()

調(diào)用時不傳參數(shù),參數(shù)為undefined,有默認值則值為默認值。
【JavaScript】深度理解js的函數(shù)(function、Function),JavaScript,javascript,開發(fā)語言,ecmascript

arguments對象

arguments 是一個對應于傳遞給函數(shù)的參數(shù)的類數(shù)組對象。
arguments對象是所有(非箭頭)函數(shù)中都可用的局部變量。你可以使用arguments對象在函數(shù)中引用函數(shù)的參數(shù)。
箭頭函數(shù)使用arguments在瀏覽器環(huán)境下會報錯。

function fnParams(
  name,
  age = 18,
  object = {
    label: 'object形參',
  },
  fn = () => {},
  date = new Date(),
  arr = []
) {
  console.log(name, age, object, fn, date, arr)
  console.log(arguments)
}
fnParams('zsk', () => {})

const fn = (name) => {
  console.log(name, arguments)
}
fn('zsk')

【JavaScript】深度理解js的函數(shù)(function、Function),JavaScript,javascript,開發(fā)語言,ecmascript

剩余參數(shù)

剩余參數(shù)是es6的,剩余參數(shù)語法允許我們將一個不定數(shù)量的參數(shù)表示為一個數(shù)組。
如果函數(shù)的最后一個命名參數(shù)以…為前綴,則它將成為一個由剩余參數(shù)組成的真數(shù)組,其中從0(包括)到theArgs.length(排除)的元素由傳遞給函數(shù)的實際參數(shù)提供。

function(a, b, ...theArgs) {
  // ...
}

如上,theArgs就是剩余參數(shù),它是一個數(shù)組,包含那些沒有對應形參的實參,默認值[],不能更改默認值。

let fn = function (a, ...args) {
  console.log(a, args)
}
fn(1, 2, 3)

【JavaScript】深度理解js的函數(shù)(function、Function),JavaScript,javascript,開發(fā)語言,ecmascript

this

在絕大多數(shù)情況下,函數(shù)的調(diào)用方式?jīng)Q定了 this 的值(運行時綁定)。this 不能在執(zhí)行期間被賦值,并且在每次函數(shù)被調(diào)用時 this 的值也可能會不同??梢允褂?bind 方法來設置函數(shù)的 this 值,而不用考慮函數(shù)如何被調(diào)用的。箭頭函數(shù)本身沒有this,值為創(chuàng)建時外層上下文對象。

function fn2() {
  console.log('fn2::', this)
  const arrowFn = (a = 1) => {
    console.log('()=>{} ::', this)
  }
  const fn = function (a = 1) {
    console.log('fn::', this)
  }
  arrowFn()
  fn()
  let o = {
    fn: fn,
  }
  o.fn()
}
fn2()

【JavaScript】深度理解js的函數(shù)(function、Function),JavaScript,javascript,開發(fā)語言,ecmascript
bind()、call() 和 apply()方法可以改變this值。

a = 1
const obj = {
  a: 2,
}
function fn3() {
  // 'use strict'
  console.log(this.a)
  return this
}
fn3()

fn3.bind(obj)()
fn3()
fn3.bind()()
fn3.call(obj, 1, 2)
fn3()
fn3.call()

fn3.apply(obj, [1, 2])
fn3()
fn3.apply()

【JavaScript】深度理解js的函數(shù)(function、Function),JavaScript,javascript,開發(fā)語言,ecmascript

函數(shù)體

函數(shù)體沒啥說的,什么都可以寫。自己都可以調(diào)用。。。,遞歸就是這么來的。
如果有return 的話,可以返回函數(shù),例如實現(xiàn)閉包、函數(shù)柯里化、高階函數(shù)等。

函數(shù)屬性

另外,函數(shù)本身還有一些屬性和方法:

  • name 返回函數(shù)定義的名稱。
  • length 只讀屬性,表示函數(shù)形參的個數(shù)
  • prototype 函數(shù)的原型對象
  • toString() 返回函數(shù)完整的源代碼字符串

結(jié)語

有了函數(shù),js就算玩出花來,也可以有條理性。文章來源地址http://www.zghlxwxcb.cn/news/detail-809986.html

到了這里,關于【JavaScript】深度理解js的函數(shù)(function、Function)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • addEventListener is not a function , JavaScript添加監(jiān)聽事件時報錯

    addEventListener is not a function , JavaScript添加監(jiān)聽事件時報錯

    簡介:在寫JavaScript代碼的時候,控制臺有時候會遇到這樣的報錯, addEventListener is not a function ,說addEventListener不是一個函數(shù),具體原因是因為監(jiān)聽事件的事件源不對,事件源應該是一個元素,而非其它。 因此我們在獲取元素時要注意, getElementsByClassName()、 getElementByTagName

    2024年02月09日
    瀏覽(21)
  • 什么是JavaScript中的IIFE(Immediately Invoked Function Expression)?它的作用是什么?

    什么是JavaScript中的IIFE(Immediately Invoked Function Expression)?它的作用是什么?

    前端入門之旅:探索Web開發(fā)的奇妙世界 歡迎來到前端入門之旅!感興趣的可以訂閱本專欄哦!這個專欄是為那些對Web開發(fā)感興趣、剛剛踏入前端領域的朋友們量身打造的。無論你是完全的新手還是有一些基礎的開發(fā)者,這里都將為你提供一個系統(tǒng)而又親切的學習平臺。在這個

    2024年02月08日
    瀏覽(16)
  • python selenium報錯:Message: javascript error: arguments[0].click is not a function

    python selenium報錯:Message: javascript error: arguments[0].click is not a function

    ? 這是selenium比較常見的報錯,所以記錄一下解決方法,避免總是忘記。 代碼示例: 分析原因 通過debug可以發(fā)現(xiàn),click1并不是一個WebElement,而是一個list 解決方法: 所以把click1改成click1[0],就可以了 ? ?

    2024年02月15日
    瀏覽(30)
  • vue及js中使用function及箭頭函數(shù)定義方法

    目錄 1.函數(shù)聲明,使用function 2.函數(shù)表達式,使用function 3.使用箭頭函數(shù)方式 4.函數(shù)構(gòu)造器 5.總結(jié) 1.函數(shù)聲明,使用function 2.函數(shù)表達式,使用function 3.使用箭頭函數(shù)方式 4.函數(shù)構(gòu)造器 5.總結(jié) 在vue中,我們通過v-on指定來綁定要指定的方法,可以使用function或const箭頭函數(shù)的方式

    2024年02月05日
    瀏覽(17)
  • 什么是函數(shù)式編程(functional programming)?在JavaScript中如何實現(xiàn)函數(shù)式編程的概念?

    什么是函數(shù)式編程(functional programming)?在JavaScript中如何實現(xiàn)函數(shù)式編程的概念?

    前端入門之旅:探索Web開發(fā)的奇妙世界 記得點擊上方或者右側(cè)鏈接訂閱本專欄哦 幾何帶你啟航前端之旅 歡迎來到前端入門之旅!這個專欄是為那些對Web開發(fā)感興趣、剛剛踏入前端領域的朋友們量身打造的。無論你是完全的新手還是有一些基礎的開發(fā)者,這里都將為你提供一

    2024年02月07日
    瀏覽(19)
  • 【Azure 應用服務】Azure JS Function 異步方法中執(zhí)行SQL查詢后,Callback函數(shù)中日志無法輸出問題

    【Azure 應用服務】Azure JS Function 異步方法中執(zhí)行SQL查詢后,Callback函數(shù)中日志無法輸出問題

    開發(fā) Azure JS Function(NodeJS),使用 mssql 組件操作數(shù)據(jù)庫。當SQL語句執(zhí)行完成后,在Callback函數(shù)中執(zhí)行日志輸出?context.log(\\\" ...\\\") , 遇見如下錯誤: Warning: Unexpected call to \\\'log\\\' on the context object after function execution has completed. Please check for asynchronous calls that are not awaited or calls to \\\'done\\\' ma

    2024年02月03日
    瀏覽(24)
  • 深度解析JavaScript遞歸函數(shù)

    深度解析JavaScript遞歸函數(shù) 大家好,我是免費搭建查券返利機器人賺傭金就用微賺淘客系統(tǒng)3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿!在今天的文章中,我們將深入研究JavaScript中一個強大而神秘的編程概念——遞歸函數(shù)。讓我們一起探秘遞歸的魅力,深入了解其

    2024年01月19日
    瀏覽(16)
  • JavaScript 深度剖析-函數(shù)式編程(一)

    JavaScript 深度剖析-函數(shù)式編程(一)

    為什么要學習函數(shù)編程以及什么是函數(shù)式編程 函數(shù)式編程的特性(純函數(shù)、柯里化、函數(shù)組合等) 函數(shù)式編程的應用場景 函數(shù)式編程庫 Lodash 函數(shù)式編程是非常古老的一個概念,早于第一臺計算機的誕生,函數(shù)式編程的歷史。 那我們?yōu)槭裁船F(xiàn)在還要學函數(shù)式編程? 函數(shù)式編程

    2024年02月15日
    瀏覽(49)
  • JavaScript深拷貝(js深拷貝,JavaScript遞歸函數(shù),實現(xiàn)深拷貝)

    JavaScript深拷貝(js深拷貝,JavaScript遞歸函數(shù),實現(xiàn)深拷貝)

    簡述:JavaScript的深拷貝和淺拷貝大家都比較熟悉,今天來分享下深拷貝,就是使用該函數(shù)時,會復制拷貝一份該數(shù)據(jù),修改該數(shù)據(jù)屬性,不會改變原有數(shù)據(jù),就是把復制的對象所引用的對象全都復制了一遍,具體實現(xiàn)如下; 1、定義拷貝對象; 2、定義遞歸函數(shù)deepClone(),實現(xiàn)

    2024年02月15日
    瀏覽(21)
  • JavaScript節(jié)流功能(js節(jié)流函數(shù),節(jié)流功能的應用與解析,深入了解JavaScript節(jié)流函數(shù))

    簡述:上篇文章介紹了js防抖功能,這期說下js節(jié)流功能。節(jié)流就是某一高頻事件不斷被觸發(fā)時,將多次執(zhí)行變成每隔一段時間執(zhí)行,具體點就是減少一個事件在一段時間內(nèi)的觸發(fā)頻率,它是一種常用的函數(shù)優(yōu)化技術,可以限制函數(shù)的執(zhí)行頻率,從而提高網(wǎng)頁的性能和用戶體驗

    2024年02月13日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包