JS函數(shù)--Function

<strong>一.通過關(guān)鍵字 function 定義</strong>
1.函數(shù)可以通過聲明定義府阀,也可以是一個(gè)表達(dá)式灼芭。
1)聲明:
function functionName(parameters) {
執(zhí)行的代碼
}
注意:
a.由于函數(shù)聲明不是一個(gè)可執(zhí)行語句,所以不以分號(hào)結(jié)束区端。
2)表達(dá)式:
函數(shù)表達(dá)式可以存儲(chǔ)在變量中:
var x = function (a, b) {return a * b};
在函數(shù)表達(dá)式存儲(chǔ)在變量后沈善,變量也可作為一個(gè)函數(shù)使用:
var z = x(4, 3);
注意:
a.以上函數(shù)實(shí)際上是一個(gè) 匿名函數(shù) (函數(shù)沒有名稱)。
b.函數(shù)存儲(chǔ)在變量中炼绘,不需要函數(shù)名稱嗅战,通常通過變量名來調(diào)用。
c.上述函數(shù)以分號(hào)結(jié)尾俺亮,因?yàn)樗且粋€(gè)執(zhí)行語句驮捍。

<strong>二.通過內(nèi)置的 JavaScript 函數(shù)構(gòu)造器(Function())定義</strong>
var myFunction = new Function("a", "b", "return a * b");
var x = myFunction(4, 3);
等價(jià)于:
var myFunction = function (a, b) {return a * b}
var x = myFunction(4, 3);
注意:
在 JavaScript 中,很多時(shí)候脚曾,你需要避免使用 new 關(guān)鍵字东且。

<strong>三.函數(shù)提升(Hoisting)</strong>
提升(Hoisting)應(yīng)用在變量的聲明與函數(shù)的聲明。使變量和函數(shù)可以在聲明之前調(diào)用本讥。
注意:
聲明方式的函數(shù)可以提升珊泳,使用表達(dá)式定義函數(shù)時(shí)無法提升。

<strong>四.自調(diào)用函數(shù)</strong>
(function () {
var x = "Hello!!";
})();
或:
(function(){
var x = "World!!";
}());
注意:
a.想避免因少寫一個(gè)分號(hào)而拋出TypeError: undefined is not a function異常囤踩,那么就像下面的那樣寫吧旨椒!
;(function(){
console.log('HI');
}());
b.以上函數(shù)實(shí)際上是一個(gè) 匿名自我調(diào)用的函數(shù) (沒有函數(shù)名)。
c首先要牢記一條規(guī)則:括號(hào)會(huì)馬上執(zhí)行其前面的表達(dá)式堵漱。
var i=function (a,b){
return a+b;
}(1,2);
alert(i);

<strong>五.函數(shù)是對(duì)象</strong>
1.在JavaScript解釋執(zhí)行的時(shí)候综慎,實(shí)際上每個(gè)函數(shù)都是被維護(hù)為一個(gè)對(duì)象,即函數(shù)對(duì)象(Function Object)勤庐。

2.函數(shù)對(duì)象與其它用戶所定義的對(duì)象有著本質(zhì)的區(qū)別示惊,這一類對(duì)象被稱之為內(nèi)部對(duì)象,例如日期對(duì)象(Date)愉镰、數(shù)組對(duì)象(Array)米罚、字符串對(duì)象(String)都是屬于內(nèi)部對(duì)象。換句話說丈探,這些內(nèi)置對(duì)象的構(gòu)造器是由JavaScript本身所定義的:通過執(zhí)行new Array()這樣的語句返回一個(gè)對(duì)象录择,JavaScript 內(nèi)部有一套機(jī)制來初始化返回的對(duì)象,而不是由用戶來指定對(duì)象的構(gòu)造方式碗降。

3.在 JavaScript中隘竭,函數(shù)對(duì)象對(duì)應(yīng)的類型是Function,正如數(shù)組對(duì)象對(duì)應(yīng)的類型是Array讼渊,日期對(duì)象對(duì)應(yīng)的類型是Date一樣动看,可以通過new Function()來創(chuàng)建一個(gè)函數(shù)對(duì)象,也可以通過function關(guān)鍵字來創(chuàng)建一個(gè)對(duì)象爪幻。

4.為了便于理解菱皆,將函數(shù)對(duì)象的創(chuàng)建和數(shù)組對(duì)象的創(chuàng)建來比較须误。先看數(shù)組對(duì)象:下面兩行代碼的作用是一樣的,都是創(chuàng)建一個(gè)數(shù)組對(duì)象:
var myArray=[];
等價(jià)于
var myArray=new Array();
同樣仇轻,下面的兩段代碼也是等價(jià)的京痢,都是創(chuàng)建一個(gè)函數(shù):
function myFunction(a,b){
return a+b;
}
等價(jià)于
var myFunction=new Function("a","b","return a+b");

<strong>六.函數(shù)參數(shù)</strong>
1.顯示參數(shù)Parameters
函數(shù)顯式參數(shù)在函數(shù)定義時(shí)列出。
functionName(parameter1, parameter2, parameter3) {
// 要執(zhí)行的代碼……
}
2.隱式參數(shù)Arguments
函數(shù)隱式參數(shù)在函數(shù)調(diào)用時(shí)傳遞給函數(shù)真正的值拯田。
function funTest(a,b){
for(var i in argument){
console.log(argument[i]);
}
}
funTest(1,2,3,'4','5',true,6);//前兩個(gè)是顯示參數(shù)历造,其他都是隱式參數(shù)
3.理解說明:
javascript函數(shù)的參數(shù)與大多數(shù)其他語言的函數(shù)的參數(shù)有所不同。函數(shù)不介意傳遞進(jìn)來多少個(gè)參數(shù)船庇,也不在乎傳進(jìn)來的參數(shù)是什么數(shù)據(jù)類型吭产,甚至可以不傳參數(shù)。

<strong>七.函數(shù)調(diào)用</strong>
1.函數(shù)作為一個(gè)函數(shù)調(diào)用
function myFunction(a, b) {
return a * b;
}
myFunction(10, 2); // 直接調(diào)用函數(shù)鸭轮,返回20臣淤;
注意:
a.在瀏覽器中的頁面對(duì)象是瀏覽器窗口(window 對(duì)象)。以上函數(shù)會(huì)自動(dòng)變?yōu)?window 對(duì)象的函數(shù)窃爷。myFunction() 和 window.myFunction() 是一樣的:
function myFunction(a, b) {
return a * b;
}
window.myFunction(10, 2);//這是調(diào)用 JavaScript 函數(shù)常用的方法邑蒋, 但不是良好的編程習(xí)慣,全局變量按厘,方法或函數(shù)容易造成命名沖突的bug医吊。
b.函數(shù)作為全局對(duì)象調(diào)用,會(huì)使 this 的值成為全局對(duì)象逮京。使用 window 對(duì)象作為一個(gè)變量容易造成程序崩潰卿堂。
function myFunction() {
return this;
}
myFunction(); //f返回是"[object Window]"

2.函數(shù)作為一個(gè)方法調(diào)用
在 JavaScript 中你可以將函數(shù)定義為對(duì)象的方法。
以下實(shí)例創(chuàng)建了一個(gè)對(duì)象 (myObject), 對(duì)象有兩個(gè)屬性 (firstName 和 lastName), 及一個(gè)方法 (fullName):
var myObject = {
firstName:"W",
lastName: "ZL",
fullName: function () {
return this.firstName + " " + this.lastName;
},
other: function(){
return this;
}
}
myObject.fullName(); // 返回"WZL"
myObject.other(); // 返回"[object Object]"
注意:
a.fullName 方法是一個(gè)函數(shù)懒棉。函數(shù)屬于對(duì)象草描。
b.this對(duì)象,擁有 JavaScript 代碼策严。實(shí)例中 this 的值為 myObject 對(duì)象穗慕。
3.使用構(gòu)造函數(shù)調(diào)用函數(shù) // 略掉
4.使用函數(shù)方法調(diào)用函數(shù)
在 JavaScript 中, 函數(shù)是對(duì)象。JavaScript 函數(shù)有它的屬性和方法妻导。
call() 和 apply() 是預(yù)定義的函數(shù)方法逛绵。 兩個(gè)方法可用于調(diào)用函數(shù),兩個(gè)方法的第一個(gè)參數(shù)必須是對(duì)象本身倔韭。
實(shí)例:
var myObject;
var myArray = [10,2];
function myFunction(a, b) {
return a * b;
}
myObject = myFunction.call(myObject, 10, 2);
myObject = myFunction.apply(myObject, myArray);

<strong>八.函數(shù)閉包</strong>
1.JavaScript 變量可以是局部變量或全局變量暑脆。私有變量可以用到閉包。
2.在web頁面中全局變量屬于 window 對(duì)象狐肢。
3.變量聲明時(shí)如果不使用 var 關(guān)鍵字,那么它就是一個(gè)全局變量沥曹,即便它在函數(shù)內(nèi)定義份名。
4.內(nèi)嵌函數(shù)
5.函數(shù)閉包
var add = (function () {
var counter = 0;
return function() {return counter += 1;}
})();

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末碟联,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子僵腺,更是在濱河造成了極大的恐慌鲤孵,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辰如,死亡現(xiàn)場離奇詭異普监,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)琉兜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門凯正,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人豌蟋,你說我怎么就攤上這事廊散。” “怎么了梧疲?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵允睹,是天一觀的道長。 經(jīng)常有香客問我幌氮,道長缭受,這世上最難降的妖魔是什么该互? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任米者,我火速辦了婚禮,結(jié)果婚禮上慢洋,老公的妹妹穿的比我還像新娘塘雳。我一直安慰自己,他們只是感情好普筹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布败明。 她就那樣靜靜地躺著,像睡著了一般太防。 火紅的嫁衣襯著肌膚如雪妻顶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天蜒车,我揣著相機(jī)與錄音讳嘱,去河邊找鬼。 笑死酿愧,一個(gè)胖子當(dāng)著我的面吹牛沥潭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嬉挡,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼钝鸽,長吁一口氣:“原來是場噩夢啊……” “哼汇恤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拔恰,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤因谎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后颜懊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體财岔,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年河爹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了匠璧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡昌抠,死狀恐怖患朱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情炊苫,我是刑警寧澤裁厅,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站侨艾,受9級(jí)特大地震影響执虹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜唠梨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一袋励、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧当叭,春花似錦茬故、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至醉箕,卻和暖如春钾腺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背讥裤。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國打工放棒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人己英。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓间螟,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子寒亥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

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

  • 工廠模式類似于現(xiàn)實(shí)生活中的工廠可以產(chǎn)生大量相似的商品艇肴,去做同樣的事情睬棚,實(shí)現(xiàn)同樣的效果;這時(shí)候需要使用工廠模式涂身。簡單...
    舟漁行舟閱讀 7,761評(píng)論 2 17
  • 原文: https://github.com/ecomfe/spec/blob/master/javascript...
    zock閱讀 3,372評(píng)論 2 36
  • 《ijs》速成開發(fā)手冊(cè)3.0 官方用戶交流:iApp開發(fā)交流(1) 239547050iApp開發(fā)交流(2) 10...
    葉染柒丶閱讀 5,152評(píng)論 0 7
  • js函數(shù)對(duì)象 轉(zhuǎn)載文章 函數(shù)是進(jìn)行模塊化程序設(shè)計(jì)的基礎(chǔ)威蕉,編寫復(fù)雜的Ajax應(yīng)用程序最住,必須對(duì)函數(shù)有更深入的了解引颈。 J...
    猩崽大叔閱讀 986評(píng)論 0 0
  • 開業(yè)第四天蛉抓,中餐廳迎來了薇姐扰才、曉明哥和周冬雨的老師崔新琴——北京電影學(xué)院教授同波。 崔老師一來就干起了活鳄梅,首先亮相的便...
    丫頭yuer閱讀 711評(píng)論 3 2