函數(shù)和作用域

JavaScript函數(shù)是指一個(gè)特定代碼塊贡避,可能包含多條語句俭正,可以通過名字來供其它語句調(diào)用以執(zhí)行函數(shù)包含的代碼語句。

比如我們有一個(gè)特定的功能需要三條語句實(shí)現(xiàn)


statement1;
statement2;
statement3;

那么每次想實(shí)現(xiàn)這個(gè)功能的時(shí)候就需要寫這三句話,很麻煩,我們可以把這三條語句打包為一個(gè)函數(shù)

function doSomething(){
    statement1;
    statement2;
    statement3;
}

這樣每次想實(shí)現(xiàn)功能的時(shí)候我們就調(diào)用一下函數(shù)就可以了邦泄,調(diào)用函數(shù)通過函數(shù)名稱()的形式調(diào)用

doSomething();

聲明函數(shù)

ECMAScript規(guī)定了兩種聲明函數(shù)方式

函數(shù)聲明

function functionName(){
    statement;
}

使用function關(guān)鍵字可以聲明一個(gè)函數(shù),看個(gè)例子

var printName = function(){
    console.log('Byron');
};

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

var printName = function(){
    console.log('Byron');
};

參數(shù)

上面定義的函數(shù)有一個(gè)缺陷裂垦,就是過于僵化顺囊,只能打印Byron,當(dāng)我們希望打印Casper的時(shí)候就需要一個(gè)新的函數(shù)蕉拢,這也是很復(fù)雜的特碳,我們可以通過參數(shù)的方式來讓函數(shù)能靈活一些

function printName(name){
    console.log(name);
}

printName('Byron');
printName('Casper');

可以看出我們?cè)诙x函數(shù)的時(shí)候在括號(hào)內(nèi)寫了個(gè)name做占位符,也就是在定義函數(shù)的時(shí)候也不知道要輸出什么晕换,用個(gè)占位符代替午乓,在函數(shù)實(shí)際執(zhí)行的時(shí)候,用真實(shí)的值替代占位符

我們說的占位符在術(shù)語上叫做形參闸准,也就是形式參數(shù)益愈,而在調(diào)用函數(shù)的時(shí)候傳入的值叫做實(shí)參,也就是實(shí)際的參數(shù)

函數(shù)在定義的時(shí)候可以寫多個(gè)參數(shù)

function printPersonInfo(name, age, sex){
    console.log(name);
    console.log(age);
    console.log(sex);
}

auguments

在函數(shù)內(nèi)部,你可以使用arguments對(duì)象獲取到該函數(shù)的所有傳入?yún)?shù)

function printPersonInfo(name, age, sex){
    console.log(name);
    console.log(age);
    console.log(sex);
    console.log(arguments);
}

返回值

有時(shí)候我們希望在函數(shù)執(zhí)行后給我們一個(gè)反饋夷家,就像表達(dá)式一樣蒸其,給我們個(gè)結(jié)果,我們可以通過return來實(shí)現(xiàn)

function fn(a, b){
    a++;
    b++;
    return a + b;
}

var result = fn(2, 3);
conslole.log(result);

這樣我們就能拿到函數(shù)希望給我的反饋了库快,調(diào)用return后枣接,函數(shù)立即中斷并返回結(jié)果,即使后面還有語句也不再執(zhí)行

其實(shí)我們不寫return語句缺谴,函數(shù)也會(huì)默認(rèn)給我們返回undefined

聲明提前

和變量的聲明會(huì)前置一樣但惶,函數(shù)聲明同樣會(huì)前置,如果我們使用函數(shù)表達(dá)式那么規(guī)則和變量一樣

console.log(fn); //undefined

var fn = function(){}

如果我們使用函數(shù)聲明的方式湿蛔,那么即使函數(shù)寫在最后也可以在前面語句調(diào)用膀曾,前提是函數(shù)聲明部分已經(jīng)被下載到本地

fn(); // "1"

function fn(){
    console.log('1');
}

作用域

作用域(scope)指的是變量存在的范圍。Javascript只有兩種作用域:一種是全局作用域阳啥,變量在整個(gè)程序中一直存在添谊,所有地方都可以讀取察迟;另一種是函數(shù)作用域斩狱,變量只在函數(shù)內(nèi)部存在。

在函數(shù)外部聲明的變量就是全局變量(global variable)扎瓶,它可以在函數(shù)內(nèi)部讀取所踊。

var v = 1;

function f(){
  console.log(v);
}

f()
// 1

在函數(shù)內(nèi)部定義的變量,外部無法讀取概荷,稱為“局部變量”(local variable)秕岛。

function f(){
  var v = 1;
}

v // ReferenceError: v is not defined

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

var v = 1;

function f(){
  var v = 2;
  console.log(v);
}

f() // 2
v // 1
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末继薛,一起剝皮案震驚了整個(gè)濱河市修壕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌遏考,老刑警劉巖慈鸠,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異灌具,居然都是意外死亡林束,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門稽亏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人缕题,你說我怎么就攤上這事截歉。” “怎么了烟零?”我有些...
    開封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵瘪松,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我锨阿,道長(zhǎng)宵睦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任墅诡,我火速辦了婚禮壳嚎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘末早。我一直安慰自己烟馅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開白布然磷。 她就那樣靜靜地躺著郑趁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪姿搜。 梳的紋絲不亂的頭發(fā)上寡润,一...
    開封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音舅柜,去河邊找鬼梭纹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛致份,可吹牛的內(nèi)容都是我干的栗柒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼瞬沦!你這毒婦竟也來了太伊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤逛钻,失蹤者是張志新(化名)和其女友劉穎僚焦,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體曙痘,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡芳悲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了边坤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片名扛。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖茧痒,靈堂內(nèi)的尸體忽然破棺而出肮韧,到底是詐尸還是另有隱情,我是刑警寧澤旺订,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布弄企,位于F島的核電站,受9級(jí)特大地震影響区拳,放射性物質(zhì)發(fā)生泄漏拘领。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一樱调、第九天 我趴在偏房一處隱蔽的房頂上張望约素。 院中可真熱鬧,春花似錦笆凌、人聲如沸业汰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽样漆。三九已至,卻和暖如春晦闰,著一層夾襖步出監(jiān)牢的瞬間放祟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工呻右, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留跪妥,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓声滥,卻偏偏與公主長(zhǎng)得像眉撵,于是被迫代替她去往敵國(guó)和親侦香。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

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