本篇文章給大家?guī)淼膬?nèi)容是關(guān)于js的function函數(shù)是什么?js中function的用法,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
Function與函數(shù)
Function是JavaScript提供的一種引用類型,通過Function類型創(chuàng)建Function對象。
在JavaScript中,函數(shù)也是以對象的形式存在的,每個函數(shù)都是一個Function對象。
//字面量方式創(chuàng)建函數(shù) var?fun?=function?()?{ ????console.log(100) }; //函數(shù)聲明方式創(chuàng)建函數(shù) function?fn?()?{ ????console.log(200) }; /*?????創(chuàng)建Funtion類型的對象 *???????var?函數(shù)名?=?new?Function('參數(shù)',''函數(shù)體)*/ var?f?=?new?Function('a','console.log(a)'); f(2);//以函數(shù)方式調(diào)用
Function類型
Function的apply()方法
Function的apply()方法用于調(diào)用一個函數(shù),并且接受指定的this值,以及一個數(shù)組作為參數(shù)。
//定義函數(shù) function?fun(value)?{ ????console.log(value) } /* 函數(shù)的apply()方法——>用于調(diào)用一個函數(shù) ?????函數(shù)名.apply(thisArg,[argsArray]) ???????thisArg——>可選項,函數(shù)運行時使用的this值 ???????argsArray——>可選項,一個數(shù)組或者類數(shù)組對象,其中的元素作為單獨的參數(shù)傳給Function函數(shù)。*/ fun.apply(null,['100']);
Function的call()方法
Function的call()方法用于調(diào)用一個函數(shù),并且接受指定的this值,以及參數(shù)列表。
var?fun??=?function?(value,a,b,)?{ ????console.log(value,a,b,) } /* *???call()方法調(diào)用函數(shù) *???函數(shù)名.call(thisArg,arg1,arg2,…) * *???和apply()的區(qū)別在于提供參數(shù)的方式不同 */ fun.call(null,2,3,4);//2?3?4
Function的bind方法
Function用于創(chuàng)造一個新的函數(shù),稱為綁定函數(shù),并且接受指定的this值作為參數(shù),以及參數(shù)列表
var?fun?=?function?(a,b,c)?{ ????console.log(?a,b,c) } /*??bind方法->相當(dāng)于復(fù)制一份當(dāng)前函數(shù) *???函數(shù)名.bind(thisArg,arg1,arg2,...) *?????thisArg->當(dāng)綁定函數(shù)被調(diào)用時,該屬性作為原函數(shù)運行時的this指向 *?????arg->參數(shù)。當(dāng)綁定函數(shù)被調(diào)用時,這些參數(shù)將在實參之前傳遞給被綁定的方法 *?????*/ var?v?=fun.bind(null,2,3,4); v();//2?3?4
沒有重載
在其他開發(fā)語言中,函數(shù)有一種特性叫做重載。就是定義多個同名的函數(shù),但沒一個函數(shù)接收的參數(shù)個數(shù)不同,程序會根據(jù)調(diào)用時傳遞的實參個數(shù)進行判斷,具體調(diào)用的是哪個函數(shù)。
單JavaScript中函數(shù)是沒有重疊現(xiàn)象的,如果定義多個同名的函數(shù),只有最后一個定義的函數(shù)是有效的。
arguments對象
雖然沒有重載,但是JavaScript提供了argumengs對象可以模擬函數(shù)重載的現(xiàn)象。
/* *????argumengs對象 *????*該對象存儲當(dāng)前函數(shù)中所有的參數(shù)(實參)->類數(shù)組對象 *????*該對象一般用于函數(shù)中 *????*作用-用于獲取當(dāng)前函數(shù)的所有參數(shù) *????*arguments.length->函數(shù)所有參數(shù)(實參)的個數(shù)*/ function?fun()?{ ????var?num?=?arguments.length; ????switch?(num){ ????????case?2://參數(shù)個數(shù) ????????????return?arguments[0]+arguments[1]; ????????break; ????????case?3: ????????????return?arguments[0]+arguments[1]+arguments[2]; ????????break; ????} } console.log(fun(4,5));//9 console.log(fun(4,5,6));//15
遞歸
在函數(shù)體內(nèi)調(diào)用自身的函數(shù)被稱之為遞歸函數(shù)。在某種意義上來說,遞歸近似于循環(huán)。兩者都重復(fù)執(zhí)行相同的代碼,都需要一個終止條件來避免無限循環(huán)和無限遞歸。
在一個函數(shù)體內(nèi),想要調(diào)用自身函數(shù),有一下兩種方式
通過使用自身函數(shù)名實現(xiàn)
通過使用arguments對象的callee屬性來實現(xiàn)
/*//無線遞歸 function?fun()?{ ????console.log('23') ????fun()//調(diào)用自身函數(shù),實現(xiàn)遞歸 } fun()*/ function?fn(v)?{ ????console.log(v); ????if?(v>=5){ ????????return ????} ????/*fn(v+1)*///使用該方法終止遞歸當(dāng)執(zhí)行下列代碼輸出時,報錯 ????arguments.callee(v+1) } /*fn(0)*/ var?f?=?fn; fn=null; f(0);
特殊函數(shù)
匿名函數(shù)
在JavaScript中,當(dāng)把函數(shù)當(dāng)做數(shù)據(jù)使用時,可以不設(shè)置名字。匿名函數(shù)的兩種用法
可以將匿名函數(shù)作為參數(shù)傳給其他函數(shù)。
可以定一某個匿名函數(shù)執(zhí)行某些一次性任務(wù)。
回調(diào)函數(shù)
當(dāng)一個函數(shù)作為另一個函數(shù)的參數(shù)時,作為參數(shù)的函數(shù)被稱之為回調(diào)函數(shù)。
//作為另一個函數(shù)參數(shù)的函數(shù)fun->回調(diào)函數(shù) var?fun?=?function?()?{ ????return?2; }; function?fn(v)?{ ????return?v(); } /* var?result=fn(fun);//函數(shù)fun作為函數(shù)fn的實參 console.log(result); */ //以上代碼等同于以下代碼 //以下代碼中作為參數(shù)的函數(shù)->匿名回調(diào)函數(shù) var?f?=?fn(function(){return?2;}); console.log(f);
自調(diào)函數(shù)
自調(diào)函數(shù)就是在定義函數(shù)后自行調(diào)用
/*????自調(diào)函數(shù)->定義即調(diào)用的函數(shù) *??????相當(dāng)于在匿名函數(shù)外加了小括號 *??????第一對括號->定義函數(shù) *??????第二對括號->調(diào)用函數(shù)*/ (function?()?{ ????console.log('23') })()//23->后邊的括號表示調(diào)用
作為值的函數(shù)
一個函數(shù)作為另一個函數(shù)的結(jié)果進行返回,作為結(jié)果返回的函數(shù)稱之為作為值的函數(shù)
var?one?=?function(){ ????return?100; } //?作為值的函數(shù)?->?內(nèi)部函數(shù)的一種特殊用法 function?fun(){ ????var?v?=?100; ????//?內(nèi)部函數(shù) ????return?function(){ ????????return?v; ????}; } var?result?=?fun(); //?console.log(result);//?one函數(shù) //?console.log(result());//?100 console.log(fun()());
閉包
作用域鏈
作用域鏈就是指局部作用域可以訪問它的父級所能訪問的作用域
var?a?=?10;//?全局變量 function?fun(){ ????var?b?=?100;//?fun函數(shù)作用域的局部變量 ????//?內(nèi)部函數(shù) ????function?fn(){ ????????var?c?=?200;//?fn函數(shù)作用域的局部變量 ????????//?內(nèi)部函數(shù) ????????function?f(){ ????????????var?d?=?300;//?f函數(shù)作用域的布局變量 ????????????//?調(diào)用變量 ????????????console.log(a);//?10 ????????????console.log(b);//?100 ????????????console.log(c);//?200 ????????????console.log(d);//?300 ????????} ????????f(); ????????//?調(diào)用變量 ????????//?console.log(a);//?10 ????????//?console.log(b);//?100 ????????//?console.log(c);//?200 ????????//?console.log(d);//?d?is?not?defined ????} ????fn(); ????//?調(diào)用變量 ????//?console.log(a);//?10 ????//?console.log(b);//?100 ????//?console.log(c);//?c?is?not?defined ????//?console.log(d);//?d?is?not?defined } fun();
閉包
當(dāng)內(nèi)部任何一個函數(shù)被通過一種方式被任何一個外部作用域訪問時,就是一個閉包。
var?n;//?定義變量,但不初始化值 function?fun(){//?函數(shù)作用域 ????var?v?=?100; ????//?進行初始化值?->?一個函數(shù) ????n?=?function(){ ????????console.log(v); ????} ????//?n(); } fun(); n();//?100
閉包的作用
提供可享的局部變量
保護共享的局部變量,提專門讀寫變量的函數(shù)
避免全局污染
相關(guān)推薦:
JavaScript?Function函數(shù)類型介紹
ECMAScript中函數(shù)function類型_javascript技巧
以上是js的function函數(shù)是什么?js中function的用法的詳細內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費脫衣服圖片

Undresser.AI Undress
人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover
用于從照片中去除衣服的在線人工智能工具。

Clothoff.io
AI脫衣機

Video Face Swap
使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的代碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級代碼編輯軟件(SublimeText3)

WebSocket與JavaScript:實現(xiàn)實時監(jiān)控系統(tǒng)的關(guān)鍵技術(shù)引言:隨著互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,實時監(jiān)控系統(tǒng)在各個領(lǐng)域中得到了廣泛的應(yīng)用。而實現(xiàn)實時監(jiān)控的關(guān)鍵技術(shù)之一就是WebSocket與JavaScript的結(jié)合使用。本文將介紹WebSocket與JavaScript在實時監(jiān)控系統(tǒng)中的應(yīng)用,并給出代碼示例,詳細解釋其實現(xiàn)原理。一、WebSocket技

如何使用WebSocket和JavaScript實現(xiàn)在線語音識別系統(tǒng)引言:隨著科技的不斷發(fā)展,語音識別技術(shù)已經(jīng)成為了人工智能領(lǐng)域的重要組成部分。而基于WebSocket和JavaScript實現(xiàn)的在線語音識別系統(tǒng),具備了低延遲、實時性和跨平臺的特點,成為了一種被廣泛應(yīng)用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現(xiàn)在線語音識別系

如何利用JavaScript和WebSocket實現(xiàn)實時在線點餐系統(tǒng)介紹:隨著互聯(lián)網(wǎng)的普及和技術(shù)的進步,越來越多的餐廳開始提供在線點餐服務(wù)。為了實現(xiàn)實時在線點餐系統(tǒng),我們可以利用JavaScript和WebSocket技術(shù)。WebSocket是一種基于TCP協(xié)議的全雙工通信協(xié)議,可以實現(xiàn)客戶端與服務(wù)器的實時雙向通信。在實時在線點餐系統(tǒng)中,當(dāng)用戶選擇菜品并下單

JavaScript和WebSocket:打造高效的實時天氣預(yù)報系統(tǒng)引言:如今,天氣預(yù)報的準確性對于日常生活以及決策制定具有重要意義。隨著技術(shù)的發(fā)展,我們可以通過實時獲取天氣數(shù)據(jù)來提供更準確可靠的天氣預(yù)報。在本文中,我們將學(xué)習(xí)如何使用JavaScript和WebSocket技術(shù),來構(gòu)建一個高效的實時天氣預(yù)報系統(tǒng)。本文將通過具體的代碼示例來展示實現(xiàn)的過程。We

如何使用WebSocket和JavaScript實現(xiàn)在線預(yù)約系統(tǒng)在當(dāng)今數(shù)字化的時代,越來越多的業(yè)務(wù)和服務(wù)都需要提供在線預(yù)約功能。而實現(xiàn)一個高效、實時的在線預(yù)約系統(tǒng)是至關(guān)重要的。本文將介紹如何使用WebSocket和JavaScript來實現(xiàn)一個在線預(yù)約系統(tǒng),并提供具體的代碼示例。一、什么是WebSocketWebSocket是一種在單個TCP連接上進行全雙工

JavaScript教程:如何獲取HTTP狀態(tài)碼,需要具體代碼示例前言:在Web開發(fā)中,經(jīng)常會涉及到與服務(wù)器進行數(shù)據(jù)交互的場景。在與服務(wù)器進行通信時,我們經(jīng)常需要獲取返回的HTTP狀態(tài)碼來判斷操作是否成功,根據(jù)不同的狀態(tài)碼來進行相應(yīng)的處理。本篇文章將教你如何使用JavaScript獲取HTTP狀態(tài)碼,并提供一些實用的代碼示例。使用XMLHttpRequest

用法:在JavaScript中,insertBefore()方法用于在DOM樹中插入一個新的節(jié)點。這個方法需要兩個參數(shù):要插入的新節(jié)點和參考節(jié)點(即新節(jié)點將要被插入的位置的節(jié)點)。

JavaScript中的HTTP狀態(tài)碼獲取方法簡介:在進行前端開發(fā)中,我們常常需要處理與后端接口的交互,而HTTP狀態(tài)碼就是其中非常重要的一部分。了解和獲取HTTP狀態(tài)碼有助于我們更好地處理接口返回的數(shù)據(jù)。本文將介紹使用JavaScript獲取HTTP狀態(tài)碼的方法,并提供具體代碼示例。一、什么是HTTP狀態(tài)碼HTTP狀態(tài)碼是指當(dāng)瀏覽器向服務(wù)器發(fā)起請求時,服務(wù)
