函數(shù)1

1.函數(shù)對(duì)象
函數(shù)就是對(duì)象。
對(duì)象是“名\值”對(duì)的集合并擁有一個(gè)連接到對(duì)象原型的隱藏的連接
函數(shù)對(duì)象連接到Function.prototype上
每個(gè)函數(shù)對(duì)象在創(chuàng)建時(shí),隱藏兩個(gè)屬性,即函數(shù)的上下文和實(shí)現(xiàn)函數(shù)行為的代碼
每個(gè)函數(shù)在創(chuàng)建時(shí)都會(huì)攜帶一個(gè)prototype屬性,它的值擁有一個(gè)constructor屬性且值為該對(duì)象的函數(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)用一個(gè)函數(shù)即暫停當(dāng)前函數(shù)并把執(zhí)行權(quán)交給新函數(shù)。
調(diào)用的函數(shù)除了接受實(shí)參外,還將接受this和arguments兩個(gè)參數(shù)
this的值取決于調(diào)用的模式:方法調(diào)用模式、函數(shù)調(diào)用模式、構(gòu)造器模式和apply調(diào)用模式
arguments表示接受實(shí)參的偽數(shù)組
方法調(diào)用模式
當(dāng)一個(gè)函數(shù)被保存為一個(gè)對(duì)象的屬性,我們將這個(gè)函數(shù)成為方法
當(dāng)這個(gè)方法被調(diào)用時(shí),this被綁定到該對(duì)象

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

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

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

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

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

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

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)建一個(gè)數(shù)組并去其去調(diào)用函數(shù)
它接受兩個(gè)參數(shù):第一個(gè)是將被綁定this的值,第二個(gè)是一個(gè)數(shù)組

var array = [3, 4];
alert(add.apply(null, array));  // 7, this沒(méi)有被強(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)用時(shí),它會(huì)被免費(fèi)贈(zèng)送一個(gè)arguments參數(shù),它是傳入實(shí)參的集合
這使得編寫(xiě)一個(gè)無(wú)形成的函數(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)一個(gè)函數(shù)被調(diào)用時(shí),它從第一條語(yǔ)句開(kāi)始執(zhí)行,直到最后的}結(jié)束
return語(yǔ)句可以讓函數(shù)提前退出執(zhí)行。當(dāng)return語(yǔ)句被調(diào)用,那么return之后的語(yǔ)句不會(huì)被執(zhí)行
當(dāng)函數(shù)是構(gòu)造器函數(shù)模式調(diào)用時(shí),返回this,并非一個(gè)對(duì)象
return返回默認(rèn)為undefined,如果沒(méi)有指定

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容