亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

簡述Function類型

ityouknow / 1873人閱讀

摘要:類型是提供的引用類型之一,通過可需變更創(chuàng)建對象。調(diào)用自身的函數(shù)被稱之為遞歸函數(shù)。想要解決上述遞歸函數(shù)的問題,可以使用對象屬性替換具體的函數(shù)名。保護貢獻的局部變量。

Function類型 概述

Function與函數(shù)

函數(shù)是這樣的一段JavaScript代碼,她只定義一次,但是可能被執(zhí)行或調(diào)用多次。
Function類型是JavaScript提供的引用類型之一,通過Function可u需變更創(chuàng)建對象。
在JavaScript中,函數(shù)也是以對象形式存在的。每一個函數(shù)都是一個Function對象。函數(shù)名,本質(zhì)就是一個變量,是指向某個Function對象的引用。
function fn(){
console.log(‘臥龍學院’);
}
console.log (fn instanceof Function);//true

構(gòu)造函數(shù)

在JavaScript中,函數(shù)除了可以通過函數(shù)定義語句或字面量變大時兩個方式意外,還可以通過Function類型進行定義:
var add = new Function(
"num1".
"num2",
)
注意:通過Function類型定義函數(shù)的效率遠不如通過函數(shù)定義或者字面量定義表達式兩個方式定義,目前,定義函數(shù)具有三種表達式。

Function的apply()方法

Function的apply()方法用于調(diào)用一個函數(shù),并且接受指定的this值,以及一個數(shù)組作為參數(shù)。其語法如下結(jié)構(gòu):
func.apply(thisarg,[argsarray])
this參數(shù):可選項,在func函數(shù)運行時使用的this值。
argsarray參數(shù):可選項,一個數(shù)組或者類數(shù)組對象,其中的數(shù)組元素將作為多帶帶的參數(shù)傳給func函數(shù)。也可以使用argumengts對象作為該參數(shù)。
返回值調(diào)用該函數(shù)的返回結(jié)果。

Function的call()方法

Function的call()方法用于調(diào)用一個函數(shù),并且接受指定的this值作為參數(shù),以及參數(shù)列表。
thisarg參數(shù):在func函數(shù)運行時使用的this值。arg1 arg2 參數(shù):指定參數(shù)列表
返回值:調(diào)用該函數(shù)的返回結(jié)果。
apply()于call()非常相似,不同之處在于提供參數(shù)的方法

Functiond 的bind()方法

Function的bind()方法用于創(chuàng)建一個新的函數(shù)(稱之為綁定函數(shù)),并且接受指定的this值作為參數(shù),以及參數(shù)列表。其語法結(jié)果如下:
fun。bind(thisarg[[arg[,arg[,arg2]]])
thisarg參數(shù):當綁定函數(shù)被調(diào)用時,該參數(shù)會作為原函數(shù)運行時的this指向,
arg1,arg2,參數(shù)。。。當綁定函數(shù)被調(diào)用時,這些參數(shù)將設置于實參之前傳遞給被綁定的方法。
返回值:返回又指定的this值和初始化參數(shù)改造的原函數(shù)拷貝。

沒有重載

在其他開發(fā)語言中,函數(shù)具有一種特性,叫做重載。所謂重載,就是定義多個同名函數(shù),但每一個函數(shù)接受的參數(shù)的個數(shù)不同,程序會根據(jù)調(diào)用實參個數(shù)進行判斷,具體調(diào)用的是那個函數(shù)。如下是列:
function add (a,b){
return a+b;
}
function add (a,b,c){
return a+b+c;
}
add(1,2);//3
add(1,2,3);//6
但是在JavaScript中,函數(shù)是沒有重載現(xiàn)象的。也就是說,如果用是定義多個同名的函數(shù),只有最后一個定義的函數(shù)是有效的。
不過,JavaScript提供了arguments對象,該對象可以模型函數(shù)重載的現(xiàn)象。arguments對象時函數(shù)內(nèi)部的本地變量;argumengts以及不再時函數(shù)的屬性了。argumengts對象可以獲取函數(shù)的所有參數(shù),但argumengts對象并不是一個數(shù)組,而是一個類數(shù)組對象

遞歸

在一個函數(shù)的函數(shù)體內(nèi),如果想調(diào)用自身函數(shù)的話,有如下兩種方式:
通過使用自身函數(shù)名實現(xiàn)。
通過使用arguments對象的callee屬性實現(xiàn)。
調(diào)用自身的函數(shù)被稱之為遞歸函數(shù)。在某種意義上說,遞歸近似于循環(huán)。兩者都重復執(zhí)行相同的代碼,并且兩者都需要一個終止條件以避免無限循環(huán)或者無限遞歸。
function loop(x){
if(x>=10){ return;}
loop(x+1);
}
loop(0);
上述代碼是一個經(jīng)典的遞歸函數(shù)。雖然這個函數(shù)表面看起來并沒有什么問題,如果直線下述代碼可能會導致出錯。
car anotherloop = loop ;
loop = null ;
anotherLoop (0)// 出錯
上述代碼將函數(shù)loop()保存到另一個變量anotherloop中,然后將loop設置為null值。當執(zhí)行another loop時,一定會執(zhí)行函數(shù)loop(),而loop已經(jīng)不再是一個函數(shù),最終導致出錯。
想要解決上述遞歸函數(shù)的問題,可以使用arguments對象callee屬性替換具體的函數(shù)名。
function loop (x) {
if (x>=10){
return;
}
arguments.callee(x+1);
}

特殊函數(shù)

匿名函數(shù)

JavaScript可以將函數(shù)作為數(shù)據(jù)使用。作為函數(shù)本體,它像普通的數(shù)據(jù)一樣,不一定要有名字。默認名字的函數(shù)被定之為匿名函數(shù)。如下實例:
function(a){return a;}
匿名函數(shù)的兩種使用方法:
可以將匿名函數(shù)作為函數(shù)作為參數(shù)傳遞給其他函數(shù)。這樣,接受方函授就能利用所傳遞的函數(shù)來完成某些事情。
可以定義某個匿名函數(shù)來執(zhí)行某些一次性任務。

回調(diào)函數(shù)

當一個函數(shù)作為參數(shù)傳遞給另一個函數(shù)時,作為參數(shù)的函數(shù)被稱之為回調(diào)函數(shù)。
function add(a,breturn a ()+b()} var one = function () {return1;}
var two = function(){return 2;}
console.log (add(one,two));//output 3}
可以直接使用匿名函數(shù)來替代one()和two(),以作為目標函數(shù)的參數(shù)
console。log (add(function(){return 1;}, function(return2;)))
上述代碼中。函數(shù)one()two()都作為函數(shù)add()的參數(shù)傳遞。所有one()和two()都是回調(diào)函數(shù)。當將函數(shù)A傳遞給函數(shù)B,并由B來執(zhí)行A時,A就成了一個回調(diào)函數(shù)。 如果A 還是一個無名函數(shù) 就稱之為匿名會點函數(shù)。 回調(diào)函數(shù)的優(yōu)點如下:
它可以在不做命名的情況下傳遞函數(shù)(這意味著可以節(jié)省全局變量)。
可以將一個函數(shù)調(diào)用操作委托給另一個函數(shù)()這意味著可以節(jié)省一些代碼編寫工作。
回調(diào)函數(shù)也有助于提升性能

自調(diào)函數(shù)

所謂自掉函數(shù)就是定義函數(shù)后自行調(diào)用。如下實例:
(function(){console.log("javascript");
})();
上述代碼的含義:第一對 括號的作用,放置的時一個匿名函數(shù)。
第二隊括號的作用,時’立即調(diào)用‘。
自調(diào)函數(shù)只需要將匿名函數(shù)的定義放進一對括號中, 然后外面再跟一對括號即可。
自調(diào)函數(shù)也可以再調(diào)用時接受參數(shù)。如下示例:
(function(name){
console.log("hello"+name+"!");
})(""jacasript);//hello javasript
上述代碼的含義如下:
當一個括號中的匿名函數(shù)接受一個參數(shù)。
第二個括號,再調(diào)用時, 像匿名函數(shù)傳遞參數(shù)內(nèi)容。

作為值的函數(shù)

將一個函數(shù)作為另一個函數(shù)的結(jié)果進行返回,作為結(jié)果返回的函數(shù)稱之為作為值的函數(shù)。
function fn( f,args){
return f (ars);
}
function add(num){//作為值的函數(shù)
return num +10;
}
var result = fn(add,10);
console.log (result);//20
上述代碼還可以編寫成如下方式:
function fn(args){
return function add(){
return args +10

}

}
上述兩段代碼的區(qū)別在于:
var f = fn(10); //function add(){return 10+10;}
var result =f()//20

閉包

作用域鏈

很多開發(fā)語言中都具有塊級作用域,但ECMAScript5版本中并沒有跨級作用域,這經(jīng)常會導致理解上的困惑。如下示例:
if (true){
var color= ‘blue’;
}
console。log(color);//blue
上述代碼再if語句中的定義了變量color。但該變量的作用域時全局域,原因是ECMASript5版本中沒有塊級作用域。
雖然再ECMASript5版本沒有塊級作用域。但具有函數(shù)作用域。在某個函數(shù)內(nèi)部定義的變量的作用域就是該函數(shù)的作用域。
function fun(){
var v = this is "wolongxueyuan ";
}
console .log (v)//輸出報錯
上述代碼在函數(shù)fun內(nèi)部定義了變量v ,該變量的作用域是fun函數(shù)的作用域。 所以在全局域訪問該變量時會報錯。每一段JavaScript代碼(全局代碼或函數(shù))都有一個與值關(guān)聯(lián)的作用域鏈。 這個作用或鏈式一個對象列表或鏈表,這組對象定義了這段代碼作用域中的變量。

閉包是什么

JavaScript允許函數(shù)嵌套,并且內(nèi)部函數(shù)可以訪問定義在外部函數(shù)中的所有變量函數(shù),已經(jīng)外部函數(shù)能訪問的所有變量和函數(shù)。但是,外部函數(shù)作用域訪問時,一個閉包就產(chǎn)生了。
閉包就是詞法表示包括不必計算的變量的函數(shù), 也就是說, 該函數(shù)能使用函數(shù)外定義的變量
如下述代碼就是一個最簡單形式的閉包結(jié)構(gòu):
var b ;
function f(){
var a=" a"};
b=function(){
returnn a+"b";
}
return a;
}
//測試
console.log (f());//a
console.log(b());//ab
閉包的特點
局部變量;在函數(shù)中定義有貢獻意義 的局部變量。()定義成全局變量會對外造成污染
內(nèi)部函數(shù):在函數(shù)(f)中聲明有內(nèi)嵌函數(shù),內(nèi)嵌函數(shù)(g)對函數(shù)(f)中的局部變量進行訪問。
外部使用:函數(shù)(f)向外返回詞內(nèi)嵌函數(shù)(g),外部可以通過詞內(nèi)嵌函數(shù)持有并訪問聲明在函數(shù)(f) 中的局部變量,而此變量在外部時通過其他途徑無法訪問的。
閉包作用:
提供可共享的局部變量。
保護貢獻的局部變量。提供專門的讀寫變量的函數(shù)。
避免全局污染

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

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/108265.html

相關(guān)文章

  • JS每日一題: 請簡述一下vuex實現(xiàn)原理

    摘要:給的實例注入一個的屬性,這也就是為什么我們在的組件中可以通過訪問到的各種數(shù)據(jù)和狀態(tài)源碼位置,是怎么實現(xiàn)的源碼位置是對的的初始化,它接受個參數(shù),為當前實例,為的,為執(zhí)行的回調(diào)函數(shù),為當前模塊的路徑。 20190221 請簡述一下vuex實現(xiàn)原理 對vuex基礎概念有不懂的可以點這里 vuex實現(xiàn)原理我們簡單過一遍源碼 地址 https://github.com/vuejs/vuex 首...

    JohnLui 評論0 收藏0
  • 簡述作用域還有閉包延伸至模塊化

    摘要:首先變量對于一個程序來說是一個很重要的角色那么問題來了這些變量存在哪里程序用到的時候如何找到變量呢所以需要一套規(guī)則來存儲變量方便之后再找到這套規(guī)則就成為作用域是一門編譯語言對于來說大部分情況下編譯發(fā)生在代碼執(zhí)行前的幾微妙的時間內(nèi)對于參與到一 首先,變量對于一個程序來說是一個很重要的角色, 那么問題來了 這些變量存在哪里,程序用到的時候如何找到變量呢? 所以需要一套規(guī)則來存儲變量方便之后...

    imingyu 評論0 收藏0
  • PHP編碼規(guī)范

    摘要:為什么需要編碼規(guī)范為了提高工作效率,保證開發(fā)的有效性和合理性。在文件編碼中,選擇推薦在換行符中,選擇推薦文件命名程序的文件名和目錄名都采用有意義的英文命名。最后最后說的是,本規(guī)范不是強制,也不是標準?;貜途幋a規(guī)范即可。 為什么需要編碼規(guī)范? 為了提高工作效率,保證開發(fā)的有效性和合理性。 為了提高代碼可讀性和可重復利用性,從而節(jié)約溝通成本。 本文主要參考了 PEAR 規(guī)范,并進行適當...

    xuweijian 評論0 收藏0
  • es6簡述

    摘要:箭頭函數(shù)首先是書寫方便其次是解決了指向全局的問題這里改為了指向當前模塊化可以用來對外暴露函數(shù)外部通過來引入函數(shù)類里面的構(gòu)造函數(shù)寫在里面并且函數(shù)添加是用并沒有關(guān)鍵字繼承者用父類來繼承對象構(gòu)造函數(shù)要用到來引入繼承的構(gòu)造函數(shù)和類似數(shù)組但是不 1. 箭頭函數(shù) 首先是書寫方便 其次是解決了this指向全局的問題, 這里改為了指向當前 2. es6模塊化 可以用export來對外暴露函數(shù), 外...

    yuxue 評論0 收藏0

發(fā)表評論

0條評論

ityouknow

|高級講師

TA的文章

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