函數(shù)1

1.函數(shù)對象
函數(shù)就是對象蔼囊。
對象是“名\值”對的集合并擁有一個連接到對象原型的隱藏的連接
函數(shù)對象連接到Function.prototype上
每個函數(shù)對象在創(chuàng)建時,隱藏兩個屬性州弟,即函數(shù)的上下文和實(shí)現(xiàn)函數(shù)行為的代碼
每個函數(shù)在創(chuàng)建時都會攜帶一個prototype屬性仍律,它的值擁有一個constructor屬性且值為該對象的函數(shù)
2.函數(shù)字面量
函數(shù)字面量 = function關(guān)鍵字 + 函數(shù)名(這里省略) + 參數(shù)(a, b) + body函數(shù)體

var add = function (a, b) {
    return a + b;
}
alert(add(3, 4));   // 7

3.調(diào)用
調(diào)用一個函數(shù)即暫停當(dāng)前函數(shù)并把執(zhí)行權(quán)交給新函數(shù)嘿悬。
調(diào)用的函數(shù)除了接受實(shí)參外,還將接受this和arguments兩個參數(shù)
this的值取決于調(diào)用的模式:方法調(diào)用模式水泉、函數(shù)調(diào)用模式善涨、構(gòu)造器模式和apply調(diào)用模式
arguments表示接受實(shí)參的偽數(shù)組
方法調(diào)用模式
當(dāng)一個函數(shù)被保存為一個對象的屬性,我們將這個函數(shù)成為方法
當(dāng)這個方法被調(diào)用時草则,this被綁定到該對象

var myObject = {
    value : 0,
    increment : function (inc) {
        alert(this);    // [object Object],即myObject對象
        this.value += typeof inc === "number" ? inc : 1;
    }
}
myObject.increment();
document.writeln(myObject.value);       // 1
myObject.increment(2);
document.writeln(myObject.value);       // 3

當(dāng)一個函數(shù)被非對象調(diào)用時钢拧,那么它就是方法調(diào)用模式
this被綁定到window對象中

window.value = 1;
myObject.one = function () {
    var helper = function () {
        alert(this.value);  // 1,這個匿名函數(shù)中的this統(tǒng)統(tǒng)指向window
        this.value = add(this.value, this.value);
    }
    helper();
}
myObject.one();
document.writeln(myObject.value);   // 3炕横,沒有變化
document.writeln(this.value);       // 2源内,由add()方法已經(jīng)改變

解決方法:用that將this保留下來,即把執(zhí)行環(huán)境保存下來

myObject.two = function () {
    var that = this;    // 將this代表的myObject對象保存到that變量中
    var helper = function () {
        這是that就代表了myObject對象
        that.value = add(that.value, that.value);
    }
    helper();
}
myObject.two();
document.writeln(myObject.value);   // 6
document.writeln(this.value);       // 1

構(gòu)造器調(diào)用模式
如果一個函數(shù)在其前面加new調(diào)用份殿,那么將創(chuàng)建一個連接到本函數(shù)的prototype成員的新對象
而this將會綁定到那個新對象中

var Que = function (string) {
    this.name = string;
}
Que.prototype.getName = function () {
    return this.name;
}
var q = new Que("no");
alert(q.getName());     // no

Apply調(diào)用模式
apply函數(shù)構(gòu)建一個數(shù)組并去其去調(diào)用函數(shù)
它接受兩個參數(shù):第一個是將被綁定this的值膜钓,第二個是一個數(shù)組

var array = [3, 4];
alert(add.apply(null, array));  // 7, this沒有被強(qiáng)制綁定值嗽交,即為window
var nameObject = {
    name : "zhangfei"
}
// 將this綁定到nameObject中,并且調(diào)用Que.prototype.getName方法
alert(Que.prototype.getName.apply(nameObject)); // zhangfei

4.參數(shù)
當(dāng)函數(shù)被調(diào)用時颂斜,它會被免費(fèi)贈送一個arguments參數(shù)夫壁,它是傳入實(shí)參的集合
這使得編寫一個無形成的函數(shù)成為可能

var addNoParam = function () {
    var res = 0;
    for (var i = 0, len = arguments.length; i < len; i++) {
        res += arguments[i];
    }
    return res;
}
alert(addNoParam(1, 3, 4, 5));      // 13

5.返回
當(dāng)一個函數(shù)被調(diào)用時,它從第一條語句開始執(zhí)行沃疮,直到最后的}結(jié)束
return語句可以讓函數(shù)提前退出執(zhí)行盒让。當(dāng)return語句被調(diào)用,那么return之后的語句不會被執(zhí)行
當(dāng)函數(shù)是構(gòu)造器函數(shù)模式調(diào)用時司蔬,返回this糯彬,并非一個對象
return返回默認(rèn)為undefined,如果沒有指定

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末葱她,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子似扔,更是在濱河造成了極大的恐慌吨些,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炒辉,死亡現(xiàn)場離奇詭異豪墅,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)黔寇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門偶器,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人缝裤,你說我怎么就攤上這事屏轰。” “怎么了憋飞?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵霎苗,是天一觀的道長。 經(jīng)常有香客問我榛做,道長唁盏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任检眯,我火速辦了婚禮厘擂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锰瘸。我一直安慰自己刽严,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布避凝。 她就那樣靜靜地躺著港庄,像睡著了一般倔既。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鹏氧,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天渤涌,我揣著相機(jī)與錄音,去河邊找鬼把还。 笑死实蓬,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吊履。 我是一名探鬼主播安皱,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼艇炎!你這毒婦竟也來了酌伊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤缀踪,失蹤者是張志新(化名)和其女友劉穎居砖,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體驴娃,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡奏候,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了唇敞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蔗草。...
    茶點(diǎn)故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖疆柔,靈堂內(nèi)的尸體忽然破棺而出咒精,到底是詐尸還是另有隱情,我是刑警寧澤旷档,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布狠轻,位于F島的核電站,受9級特大地震影響彬犯,放射性物質(zhì)發(fā)生泄漏向楼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一谐区、第九天 我趴在偏房一處隱蔽的房頂上張望湖蜕。 院中可真熱鬧,春花似錦宋列、人聲如沸昭抒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽灭返。三九已至盗迟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間熙含,已是汗流浹背罚缕。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留怎静,地道東北人邮弹。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像蚓聘,于是被迫代替她去往敵國和親腌乡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評論 2 360

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

  • 工廠模式類似于現(xiàn)實(shí)生活中的工廠可以產(chǎn)生大量相似的商品夜牡,去做同樣的事情与纽,實(shí)現(xiàn)同樣的效果;這時候需要使用工廠模式。簡單...
    舟漁行舟閱讀 7,777評論 2 17
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,238評論 0 4
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理塘装,服務(wù)發(fā)現(xiàn)急迂,斷路器,智...
    卡卡羅2017閱讀 134,707評論 18 139
  • 單例模式 適用場景:可能會在場景中使用到對象氢哮,但只有一個實(shí)例,加載時并不主動創(chuàng)建型檀,需要時才創(chuàng)建 最常見的單例模式冗尤,...
    Obeing閱讀 2,076評論 1 10
  • 不一樣的世外桃源——桃花社 文/南湘紫 因?yàn)闊釔鬯源嬖?,因?yàn)槲淖炙韵嘤?因?yàn)橄嘞韵嘀湍纾驗(yàn)樵娫~所以入社 ...
    南湘紫閱讀 1,068評論 45 37