javascript-----函數(shù)

? ? ? ? ? ? ?在js中,我們最重要的是要學(xué)會函數(shù)的思想來解決問題。首先溜在,我們要明白的是函數(shù)在數(shù)學(xué)的應(yīng)用。

? ? ? ? ? ?在數(shù)學(xué)中他托,函數(shù)是來解決一些未知數(shù)掖肋。我們在解決代數(shù)問題上一些求解的方程式上,我們需要函數(shù)來進(jìn)行設(shè)一些未知數(shù)赏参,通過這些未知數(shù)和已知數(shù)的關(guān)系來進(jìn)行等式邏輯的運(yùn)算志笼,求出未知數(shù)是函數(shù)的正確的解法沿盅。這個是函數(shù)的本質(zhì)是工具,可以幫助我們解決我們的問題纫溃。在代數(shù)中腰涧,我們要知道是未知數(shù)和已知數(shù)的相互之間的關(guān)系,來構(gòu)建函數(shù)的等式紊浩。才能通過邏輯運(yùn)算(加減乘除)來進(jìn)行運(yùn)算窖铡。首先是要進(jìn)行設(shè)出未知數(shù):x ?(在編程中,我們要通過聲明變量來進(jìn)行我們要操作的邏輯運(yùn)算坊谁。需要我們設(shè)一些未知數(shù)來進(jìn)行參與邏輯運(yùn)算的時候费彼,我們可以通過var和let等關(guān)鍵字來進(jìn)行設(shè)變量(在 代數(shù)中,是我們設(shè)的未知數(shù))這樣口芍,我們就在邏輯的運(yùn)算中箍铲,去設(shè)我們需要的變量來進(jìn)行邏輯運(yùn)算的完整性。這個是編程優(yōu)雅于數(shù)學(xué)的代數(shù)的地方鬓椭。在編程的變量颠猴,是保存值的容器,也是相當(dāng)于代數(shù)中的未知數(shù) x = 5;分作用域的概念膘融,是函數(shù)中的執(zhí)行環(huán)境芙粱。局部的作用域和全局的作用域的概念。也可以通過作用域鏈來進(jìn)行一級一級的去尋找我們的要知道的變量的氧映。一直找到window對象春畔。所以,我們要應(yīng)用我們需要的變量的話岛都,我們要大膽的去通過var/let關(guān)鍵字進(jìn)行聲明變量律姨,來進(jìn)行復(fù)雜的邏輯運(yùn)算。

? ? ? ? 再談?wù)劸室撸覀兙幊痰暮瘮?shù)择份。js底層是基于對象和函數(shù)的一種編程語言,我們也是用構(gòu)造函數(shù)來進(jìn)創(chuàng)建對象烫堤,所以我們還要基于函數(shù)進(jìn)行設(shè)計(jì)編程語言的邏輯運(yùn)算荣赶。函數(shù)的創(chuàng)建是基于我們的關(guān)鍵字function來進(jìn)行創(chuàng)建定義函數(shù)。在編程的語言設(shè)計(jì)中鸽斟,主要是簡化我們的設(shè)計(jì)拔创,避免做重復(fù)的事情,函數(shù)是編寫語言中是可以重復(fù)使用的一段代碼(專業(yè)的來講:是一段腳本)富蓄,也是來源于我們的封裝的概念剩燥。封裝好一段代碼的時候,我們可以在用到的時候立倍,進(jìn)行調(diào)用灭红,這樣侣滩,函數(shù)的第一優(yōu)點(diǎn):封裝。就體現(xiàn)出來了变擒。我們要經(jīng)常封裝好我們的函數(shù)君珠,來增加我們的工具庫。

函數(shù)的真正的威力是:我們可以把不同的數(shù)據(jù)傳遞給它們娇斑,讓不同的數(shù)據(jù)來進(jìn)行不同的預(yù)訂操作葛躏。因?yàn)椋瘮?shù)的本質(zhì)就是一段代碼悠菜,就是一組操作舰攒,就是一段腳本。要注意的是:預(yù)訂悔醋。

給函數(shù)傳遞不同的操作是摩窃,我們稱為傳參。這樣芬骄,函數(shù)就不會稱為無米之炊了猾愿,就可以通過參數(shù)來進(jìn)行預(yù)訂的操作。形參是相當(dāng)于我們需要的變量账阻。在將來調(diào)用函數(shù)的時候蒂秘,可以把形參(變量)的值傳進(jìn)去函數(shù)的參數(shù)的。這樣就可以來進(jìn)行函數(shù)代碼的操作執(zhí)行淘太。所以姻僧,我們要把函數(shù)的參數(shù)看做是普通變量進(jìn)行操作。來進(jìn)行參與函數(shù)的邏輯運(yùn)算蒲牧。我們從理解到變量的角度進(jìn)行理解形參撇贺,而函數(shù)的傳參數(shù)是可以傳任意參數(shù)的。我們可以通過arguments來進(jìn)行訪問函數(shù)的形參數(shù)冰抢∷伤唬看如下代碼:

? ? ? function myFunction (a,b) {

? ? ? ? ? ? ?// 函數(shù)執(zhí)行的代碼

? ? ? ? ? ? var c = [];

? ? ? ? ? ? ?for ( ; a < b; a++) {

? ? ? ? ? ? ? ? ? ? ?c.push(a);

? ? ? ? ? ? ? ? ? ? console.log(c);

? ? ? ? ? ? ? }

? ? ? ? ? }

? ? ? ? ? myFunction(0,10);

? ? ? ? 可以看的出來,我們在給形參賦值的時候挎扰,我們是在調(diào)用函數(shù)的時候來進(jìn)行的賦予具體的值翠订,而在參數(shù)的位置是我們要對應(yīng)形參的位置,要對應(yīng)起來遵倦。這是尽超,我們要理解函數(shù)的優(yōu)點(diǎn)的地方。

? ? ? ? ?函數(shù)還有一個強(qiáng)大的地方是:函數(shù)不僅能夠(以參數(shù)的形式)接受數(shù)據(jù)骇吭,還能返回?cái)?shù)據(jù)橙弱。通過return 語句歧寺。這是函數(shù)的最大的優(yōu)點(diǎn)燥狰。不僅能接受各種數(shù)據(jù)棘脐,還可以通過return 語句返回?cái)?shù)據(jù)。也就是說龙致,給函數(shù)返回值蛀缝,(此時的函數(shù)有值),這樣目代,函數(shù)不僅是一段代碼屈梁,也可以是容器了。存放任何值了榛了。這樣在讶,我們的函數(shù)可以多元化的幫助我們解決問題了。

? ? ? ? ?在面向?qū)ο笾兴螅瘮?shù)是本質(zhì)是對象构哺,是Function類型的實(shí)例。也具有相關(guān)的屬性和方法战坤。由于函數(shù)是對象曙强,函數(shù)名是僅僅是指向?qū)ο蟮闹羔槨2粫c某個函數(shù)綁定途茫。函數(shù)通常使用函數(shù)聲明語法來定義的碟嘴。所以,我們可以把函數(shù)名當(dāng)做指向函數(shù)對象的指針囊卜。也可以通過變量形式來進(jìn)行改變函數(shù)名的指針娜扇。

? ? ?由于函數(shù)名本身也是變量。如果發(fā)生了同名的時候栅组,會產(chǎn)生覆蓋的袱衷。 ?函數(shù)沒有重載的概念的。也就是說笑窜,聲明了兩個同名的函數(shù)致燥,而結(jié)果則是后面的函數(shù)覆蓋了前面的函數(shù)。這個是函數(shù)的沒有重載的概念排截。

? ? 函數(shù)聲明與函數(shù)的表達(dá)式:函數(shù)的聲明和函數(shù)的表達(dá)式嫌蚤。函數(shù)的聲明是通過關(guān)鍵字function 來進(jìn)行聲明函數(shù)對象下的一個實(shí)例的。而函數(shù)的表達(dá)式:是通過函數(shù)名的一個賦值的方式來進(jìn)行賦值給一個變量断傲。函數(shù)的聲明是有提升機(jī)制(函數(shù)名本質(zhì)上也是變量)脱吱,也就函數(shù)調(diào)用在函數(shù)聲明的前面也是可以的,因?yàn)檫@個是有函數(shù)的聲明機(jī)制來進(jìn)行操作的认罩。代碼如下: ? ? ? ? ? ? ? ? ? ? ? ?alert(functionName(10,10)); ? ? ?/ ?/ ? 20

// 函數(shù)聲明箱蝠。通過return語句來進(jìn)行給函數(shù)賦值。

function functionName (num1,num2) {

? ? ? ?return? num1 + num2;

}

// 函數(shù)的表達(dá)式。沒有函數(shù)提升機(jī)制宦搬。系統(tǒng)會報(bào)錯牙瓢。

? ? ? alert(sum(10,10));

? var sum? = function (num1,num2) {

? ? ? return num1 + num2;

}

函數(shù)的值:函數(shù)名本身是個變量,所以间校,函數(shù)名可以當(dāng)做參數(shù)傳遞給另一個函數(shù)矾克,(函數(shù)可以接受任何類型的參數(shù))所以,函數(shù)的拓展和方法來源于函數(shù)名的本質(zhì)憔足,是指向函數(shù)對象下實(shí)例的指針胁附,(也是變量的),所以滓彰,函數(shù)名可以作為另一個函數(shù)的參數(shù)控妻。官方的說法是:不僅可以傳遞參數(shù)一樣把一個函數(shù)傳遞給另一個函數(shù),也可以將一個函數(shù)作為另一個函數(shù)的結(jié)果返回揭绑。代碼如下:

// 定義函數(shù)名當(dāng)做函數(shù)的參數(shù)來進(jìn)操作饼暑。要想函數(shù)名當(dāng)做函數(shù)的參數(shù)的話,我們必須要利用函數(shù)的值的特性進(jìn)行操作洗做。也就是說弓叛,函數(shù)名的值(變量的得有值);

// 要學(xué)會使用函數(shù)中的參數(shù)。

function callFunction (sameFunction,sameArgumentC,sameArgumentA,sameArgumentB) {

? ? ? ? ? ? ? return sameFunction(sameArgumentC,sameArgumentA,sameArgumentB);

}

// callFunction == sameFunction(sameArguments) 或者就是callFunction的第一參數(shù)是一個函數(shù)诚纸,而callFunction的值就是第一參數(shù)的(函數(shù)的執(zhí)行結(jié)果);

// 函數(shù)名

function addFunction (num1,num2,num3) {

? ? ? ? ? ? return num1 + num2 + num3;

}

// 只要保證函數(shù)的實(shí)參數(shù)對應(yīng)于函數(shù)的形參就可以撰筷。開發(fā)者的邏輯運(yùn)算只要對應(yīng)著函數(shù)的形參和實(shí)參就可以了。邏輯體系才算完整畦徘。

var result =? callFunction(addFunction,10,10,10);

? ? ? ? ?console.log(result); // 打印結(jié)果是20.

// 要訪問函數(shù)的指針而不執(zhí)行函數(shù)的話毕籽,必須去掉函數(shù)名后面的大括號。

function myFunction (name) {

? ? ? ? ? return 'hello' +'? '+ name;

}

var nameTag = callFunction(myFunction,'xuyinghao');

console.log(nameTag);? // 打印的結(jié)果就是 hello xuyinghao

// 從一個函數(shù)返回另一個函數(shù)井辆。

//? 定義一個對象屬性的大小排序的函數(shù)关筒。利用數(shù)組的sort()方法進(jìn)行排列。

function createfunctionName (propertyName) {

? ? ? ? ? ? ? ? ? ?return function (object1,object2) {

// 比較對象的屬性的大小杯缺。

? ? ? ? var value1 = object1[propertyName];

? ? ? ? ?var value2 = object2[propertyName];

// 進(jìn)行判斷值的大小蒸播。

if (value1>value2) {

? ? ?return -1;

}else if (value)

? ?// 創(chuàng)建對象的數(shù)組。

var data = [{name:'xuyinghao',age:19},{name:'ahouhang',age:18}];

// 調(diào)用數(shù)組下的sort()方法進(jìn)行排序萍肆。

// 如果在createfunctionName(),函數(shù)里傳參的話袍榆,返回的是function(object1,object2){}這個函數(shù)。這個函數(shù)就是兩個對象屬性的比較大小塘揣。

var nameSame = data.sort(createfunctionName('name'));

console.log(createfunctionName('name'));

? ? ? ?console.log(data[0].name);

data.sort(createfunctionName('age'));

console.log(data[0].age);

// 這是作為值的函數(shù)的用法:可以作為一個函數(shù)的返回值包雀,來進(jìn)行操作。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末亲铡,一起剝皮案震驚了整個濱河市才写,隨后出現(xiàn)的幾起案子葡兑,更是在濱河造成了極大的恐慌,老刑警劉巖赞草,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讹堤,死亡現(xiàn)場離奇詭異,居然都是意外死亡房资,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門檀头,熙熙樓的掌柜王于貴愁眉苦臉地迎上來轰异,“玉大人,你說我怎么就攤上這事暑始〈疃溃” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵廊镜,是天一觀的道長牙肝。 經(jīng)常有香客問我,道長嗤朴,這世上最難降的妖魔是什么配椭? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮雹姊,結(jié)果婚禮上股缸,老公的妹妹穿的比我還像新娘。我一直安慰自己吱雏,他們只是感情好敦姻,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著歧杏,像睡著了一般镰惦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上犬绒,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天旺入,我揣著相機(jī)與錄音,去河邊找鬼凯力。 笑死眨业,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的沮协。 我是一名探鬼主播龄捡,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼慷暂!你這毒婦竟也來了聘殖?” 一聲冷哼從身側(cè)響起晨雳,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎奸腺,沒想到半個月后餐禁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡突照,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年帮非,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片讹蘑。...
    茶點(diǎn)故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡末盔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出座慰,到底是詐尸還是另有隱情陨舱,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布版仔,位于F島的核電站游盲,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蛮粮。R本人自食惡果不足惜益缎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望然想。 院中可真熱鬧链峭,春花似錦、人聲如沸又沾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杖刷。三九已至励饵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間滑燃,已是汗流浹背役听。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留表窘,地道東北人典予。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像乐严,于是被迫代替她去往敵國和親瘤袖。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 函數(shù)就是最基本的一種代碼抽象的方式昂验。 定義函數(shù)function abs(x) {if (x >=0){return...
    _我和你一樣閱讀 447評論 0 0
  • 原文鏈接 Haskell和scala都支持函數(shù)的柯里化,JavaScript函數(shù)的柯里化還與JavaScript的...
    dreamapple閱讀 2,530評論 0 24
  • 在JavaScript中捂敌,函數(shù)即對象艾扮,程序可以隨意操控它們。比如占婉,JavaScript可以把函數(shù)賦值給變量泡嘴,或者作...
    kissLife閱讀 915評論 0 0
  • 函數(shù)函數(shù)定義與調(diào)用變量作用域全局變量方法高階函數(shù)閉包箭頭函數(shù)$generator$ 函數(shù) 函數(shù)定義與調(diào)用 定義函數(shù)...
    染微言閱讀 585評論 0 5
  • 下馬飲君酒,問君何所之逆济。君言不得意酌予,歸臥南山陲。但去莫復(fù)問奖慌,白云無盡時抛虫。——王維《送別》 這首詩的最后一句讓我渾身...
    青鋒暮寒閱讀 1,676評論 12 30