JavaScript-函數(shù)

一、函數(shù)的概念

函數(shù)是一段可以反復(fù)調(diào)用的代碼塊煎饼。

作用:在程序設(shè)計中讹挎,常將一些常用的功能模塊編寫成函數(shù),以減少重復(fù)編寫程序段的工作量吆玖。提高代碼的復(fù)用性筒溃、可讀性等

二、函數(shù)的創(chuàng)建方式(函數(shù)的聲明)

(1)function 命令

function命令聲明的代碼區(qū)塊沾乘,就是一個函數(shù)怜奖。function命令后面是函數(shù)名,函數(shù)名后面是一對圓括號翅阵。函數(shù)體放在大括號里面歪玲。

function 函數(shù)名稱() {

? ? 函數(shù)中要執(zhí)行的代碼;

}

function print() {

? console.log(1);

}

上面的代碼命名了一個print函數(shù),以后使用print()這種形式掷匠,就可以調(diào)用相應(yīng)的代碼滥崩。這叫做函數(shù)的聲明

(2)函數(shù)表達(dá)式

除了用function命令聲明函數(shù),還可以采用變量賦值的寫法讹语。

var print = function() {

? console.log(1);

};

這種寫法將一個匿名函數(shù)(沒有名字的函數(shù))賦值給變量钙皮。這時,這個匿名函數(shù)又稱函數(shù)表達(dá)式

函數(shù)的執(zhí)行(調(diào)用)

函數(shù)定義好之后,函數(shù)中的代碼在程序運行過程中不會執(zhí)行短条;

function print() {

console.log(1);

}

通過函數(shù)名稱調(diào)用函數(shù)导匣,調(diào)用時執(zhí)行函數(shù)中的代碼;調(diào)用函數(shù)時茸时,要使用圓括號運算符print();

三贡定、事件的概念種類

事件:就是發(fā)生的事情

事件驅(qū)動:就是發(fā)生了某件事情之后要處理的手段和過程

事件種類

參數(shù)的聲明

函數(shù)名后面是一對圓括號涂召,里面是傳入函數(shù)的參數(shù)

function 函數(shù)名稱(參數(shù)列表){

? ? 函數(shù)體中的代碼;

}

函數(shù)定義的時候的參數(shù)诫惭,稱為形參

function print(s) {

? console.log(s);

}

function add(a,b) {

? console.log(a+b);

}

參數(shù)的傳遞

print(1)舔庶;

調(diào)用函數(shù)的時候邪意,傳入了 參數(shù)? 1歉闰,1的值給了形參s旦万。

函數(shù)調(diào)用時候傳入的參數(shù)叫做實參

函數(shù)的返回值

JavaScript 引擎遇到return語句莽红,就直接返回return后面的那個表達(dá)式的值,后面即使還有語句竭业,也不會得到執(zhí)行嘱兼。也就是說国葬,return語句所帶的那個表達(dá)式,就是函數(shù)的返回值芹壕。

注汇四、return語句不是必需的,如果沒有的話踢涌,該函數(shù)就不返回任何值通孽,或者說返回undefined。

function add(x, y) {

? return x + y; //返回x+y的和

}

var res = add(1, 1) ;//把函數(shù)的返回值 賦值給 變量res

console.log(res);//2

變量的聲明提升

函數(shù)內(nèi)部會產(chǎn)生“變量提升”現(xiàn)象睁壁。在函數(shù)內(nèi)部使用var命令聲明的變量背苦,不管在什么位置,變量聲明都會被提升到函數(shù)體的頭部潘明。

function foo(x) {

? if (x > 100) {

? ? var tmp = x - 100;

? }

}

// 等同于

function foo(x) {

? var tmp;

? if (x > 100) {

? ? tmp = x - 100;

? };

}

五行剂、arguments

????由于 JavaScript 允許函數(shù)有不定數(shù)目的參數(shù),所以需要一種機制钳降,可以在函數(shù)體內(nèi)部讀取所有參數(shù)厚宰。這就是arguments對象的由來。arguments對象包含了函數(shù)運行時的所有參數(shù)遂填,arguments[0]就是第一個參數(shù)铲觉,arguments[1]就是第二個參數(shù),以此類推吓坚。這個對象只有在函數(shù)體內(nèi)部撵幽,才可以使用。

var f = function (one) {

? console.log(arguments[0]);

? console.log(arguments[1]);

? console.log(arguments[2]);

}

f(1, 2, 3)

通過arguments對象的length屬性礁击,可以判斷函數(shù)調(diào)用時到底帶幾個參數(shù)盐杂。

六漏麦、作用域

作用域(scope)指的是變量存在的范圍。

局部作用域和全局作用域在 ES5 的規(guī)范中况褪,Javascript 只有兩種作用域:一種是全局作用域,變量在整個程序中一直存在更耻,所有地方都可以讀炔舛狻;另一種是函數(shù)作用域秧均,變量只在函數(shù)內(nèi)部存在食侮。

函數(shù)外部聲明的變量就是全局變量(global variable)

在函數(shù)內(nèi)部定義的(使用var)變量,外部無法讀取目胡,顧稱為“局部變量”(local variable)

var v = 1;//全局變量

function f() {

? var b = 2;//局部變量

? console.log(b);

? console.log(v);//它在函數(shù)內(nèi)部可以讀取全局變量锯七,但是局部變量的不能再函數(shù)外部訪問

}

f()

上面的代碼表明,函數(shù)f內(nèi)部可以讀取全局變量v誉己。

函數(shù)內(nèi)部定義的變量眉尸,會在該作用域內(nèi)覆蓋同名全局變量。

var v = 1;

function f(){

? var v = 2;

? console.log(v);

}

f() // 2

v // 1

上面代碼中巨双,變量v同時在函數(shù)的外部和內(nèi)部有定義噪猾。結(jié)果,在函數(shù)內(nèi)部定義筑累,局部變量v覆蓋了全局變量v袱蜡。

注意,對于var命令來說慢宗,局部變量只能在函數(shù)內(nèi)部聲明坪蚁,在其他區(qū)塊中聲明,一律都是全局變量镜沽。

if (true) {

? var x = 5;

}

console.log(x);? // 5

上面代碼中敏晤,變量x在條件判斷區(qū)塊之中聲明,結(jié)果就是一個全局變量缅茉,可以在區(qū)塊之外讀取茵典。

七、遞歸函數(shù):函數(shù)可以調(diào)用自身宾舅,這就是遞歸统阿。簡單來說,就是函數(shù)自己執(zhí)行過程中筹我,調(diào)用自己本身扶平。

遞歸的步驟:

1.先找臨界值,即無需計算 就能獲取的值? ? ?

2.找本次 和上一次的關(guān)系? f(n) = f(n-1)+n? (數(shù)學(xué)歸納)

3.假設(shè)當(dāng)前函數(shù)已經(jīng)可以使用了蔬蕊,調(diào)用自身計算上一次的運行結(jié)果结澄,再寫出本次運行結(jié)果 即可

八、構(gòu)造函數(shù)及對象類型(了解)

面向?qū)ο缶幊蹋∣bject Oriented Programming,縮寫為 OOP)是目前主流的編程范式麻献。它將真實世界各種復(fù)雜的關(guān)系们妥,抽象為一個個對象,然后由對象之間的分工與合作勉吻,完成對真實世界的模擬监婶。

面向?qū)ο缶幊痰牡谝徊剑褪且蓪ο蟪萏摇ο笫菃蝹€實物的抽象惑惶。通常需要一個模板,表示某一類實物的共同特征短纵,然后對象根據(jù)這個模板生成

JavaScript 語言使用構(gòu)造函數(shù)(constructor)作為對象的模板带污。所謂”構(gòu)造函數(shù)”,就是專門用來生成實例對象的函數(shù)香到。它就是對象的模板鱼冀,描述實例對象的基本結(jié)構(gòu)。一個構(gòu)造函數(shù)悠就,可以生成多個實例對象雷绢,這些實例對象都有相同的結(jié)構(gòu)。

構(gòu)造函數(shù)就是一個普通的函數(shù)理卑,但是有自己的特征和用法翘紊。

function Vehicle? () {

? this.price = 1000;

};

上面代碼中,Vehicle就是構(gòu)造函數(shù)藐唠。為了與普通函數(shù)區(qū)別帆疟,構(gòu)造函數(shù)名字的第一個字母通常大寫。

構(gòu)造函數(shù)的特點有兩個宇立。 函數(shù)體內(nèi)部使用了this關(guān)鍵字踪宠,代表了所要生成的對象實例。生成對象的時候妈嘹,必須使用new命令柳琢。new命令的作用,就是執(zhí)行構(gòu)造函數(shù)润脸,返回一個實例對象柬脸。

function Vehicle? () {

? this.price = 1000;

};

var v = new Vehicle();

v.price // 1000

上面代碼通過new命令,讓構(gòu)造函數(shù)Vehicle生成一個實例對象毙驯,保存在變量v中倒堕。這個新生成的實例對象,從構(gòu)造函數(shù)Vehicle得到了price屬性爆价。new命令執(zhí)行時垦巴,構(gòu)造函數(shù)內(nèi)部的this媳搪,就代表了新生成的實例對象,this.price表示實例對象有一個price屬性骤宣,值是1000秦爆。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市憔披,隨后出現(xiàn)的幾起案子等限,更是在濱河造成了極大的恐慌,老刑警劉巖活逆,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拗胜,居然都是意外死亡蔗候,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門埂软,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锈遥,“玉大人,你說我怎么就攤上這事勘畔∷模” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵炫七,是天一觀的道長爬立。 經(jīng)常有香客問我,道長万哪,這世上最難降的妖魔是什么侠驯? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮奕巍,結(jié)果婚禮上吟策,老公的妹妹穿的比我還像新娘。我一直安慰自己的止,他們只是感情好檩坚,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著诅福,像睡著了一般匾委。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上氓润,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天剩檀,我揣著相機與錄音,去河邊找鬼旺芽。 笑死沪猴,一個胖子當(dāng)著我的面吹牛辐啄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播运嗜,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼壶辜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了担租?” 一聲冷哼從身側(cè)響起砸民,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎奋救,沒想到半個月后岭参,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡尝艘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年演侯,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片背亥。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡秒际,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出狡汉,到底是詐尸還是另有隱情娄徊,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布盾戴,位于F島的核電站寄锐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏尖啡。R本人自食惡果不足惜锐峭,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望可婶。 院中可真熱鬧沿癞,春花似錦、人聲如沸矛渴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽具温。三九已至蚕涤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間铣猩,已是汗流浹背揖铜。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留达皿,地道東北人天吓。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓贿肩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親龄寞。 傳聞我的和親對象是個殘疾皇子汰规,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348