国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

《javascript高級程序設計》筆記:Function類型

habren / 3294人閱讀

摘要:這么長時間沒有寫博客,就是因為函數這部分比較麻煩,自己一直想抽出大把的時間來研究這個,可是結果卻是一拖再拖,這樣不好。

這么長時間沒有寫博客,就是因為函數這部分比較麻煩,自己一直想抽出大把的時間來研究這個,可是結果卻是一拖再拖,這樣不好。有時間就寫才是王道啊,不然這計劃得一直卡在這里了..

1. 幾個概念

函數:將代碼進行封裝, 復用的邏輯單元(代碼)
對象:無序鍵值對的集合
數組:有序鍵值對的集合, 數組的索引號就是鍵
屬性:對象屬性的值是一個普通的數據
方法:對象的屬性是一個函數
對象的成員:包括屬性和方法

另外關于函數,你應該時刻記住的是:函數也是對象,函數名是一個指向函數對象的指針。因此,函數也可以作為參數傳遞

2. 函數的三種創建方式 2.1 函數表達式

標準語法:

var fn = function(){}; // 只能在聲明之后調用

有一種寫法也需要注意,可能在面試題中會遇到:

var fn = function fn1(){}; // 不會報錯

有這樣一個例子,能夠很好的區分兩種寫法的差異

// 標準寫法
var fn = function(){
    console.log(fn); // function (){ console.log(fn) }
};
fn();
console.log(fn); // function (){ console.log(fn) }

// 非主流寫法
var fn1 = function fn2() {
    console.log(fn1);
    console.log(fn2);
}
fn1();
console.log(fn1);
console.log(fn2);

為了更有說服力,我直接上圖吧!

結論
函數表達式聲明方式中,function后面也可以添加函數名,但僅能在函數內部使用

2.2 函數聲明

語法:

function fn(){}; // 能夠在作用域下的任何地方使用
2.3 構造函數聲明

語法:

var fn = new Function(param1, param2, body)

Function構造函數可以接受任意數量的參數,但最后一個參數始終被看做函數體,相當于一個小型的js編譯器(執行效率低)

var fn = new Function(num1, num2, “return num1+num2”);
// 等價于
function fn(num1, num2) {
    return num1 + num2;
}
// 或
var fn = function(num1, num2) {
    return num1 + num2;
}
2.3 函數聲明和函數表達式的區別

1 函數聲明會把整個函數體提升到最前面function fn() {},因此調用的位置沒有先后之分;函數表達式只會把函數名字提升var fn = function() {}; 此時函數作為數據,因此必須先聲明后使用

2 函數聲明不能夠出現在其他語句塊中!函數聲明能夠出現的位置: 全局環境中其他函數內部

個人建議:從代碼可維護性出發,盡量使用函數表達式的方式來聲明函數

3. 函數內部屬性

1.name屬性

函數名.name => 獲取字符串類型的函數名稱

// 外部
function fn1(){};
console.log(fn1.name); // fn1
// 內部
function fn2() {
    console.log(fn2.name); // fn2
}
fn2();

2.length屬性

函數名.length => 獲取形參的個數,未傳參時返回0

// 外部
function fn1(a,b){};
console.log(fn1.length); // 2
// 內部
function fn2(a,b,c) {
    console.log(fn2.length); // 3
}
fn2();

3.caller屬性

函數名.caller => 獲得調用函數的函數引用(函數在哪被調用),如果在全局中調用當前函數,值為null

var inner = function() {
    alert(inner.caller);
};
var outer = function() {
    inner();
};
outer(); // function() { inner(); };
inner(); // null

4.arguments屬性

arguments只能在函數內部使用,用來獲取傳入的實參。是一個偽數組

其內部有如下屬性:
arguments.length:獲取實參的個數
arguments.callee:獲取當前函數的引用,一般用在匿名函數遞歸中

// 階乘
function factorial(num) {
    if(num <= 1) {
        return 1;
    } else {
        return num * arguments.callee(num - 1);
    }
}

5.this屬性

this會在下一篇博客中詳細講解,先記住一句話:
this的指向和函數執行的環境相關,與它聲明的環境無關

4.函數的形參和實參

形參:函數聲明時的參數,起占位作用——函數名.length(形參個數)
實參:函數調用時的參數,實際參與運算的值—arguments.length(實參個數)

當形參個數大于實參時,多余的形參將設置成undefined
當實參個數大于形參時,無法直接獲得所有的實參,通過arguments獲得實參

參數傳遞的理解:形參相當于一個具有局部作用域不需要聲明的和實參指向相同堆地址對象的值,其類型與實參相同

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/87424.html

相關文章

  • javascript高級程序設計筆記:內存與執行環境

    摘要:因此,所有在方法中定義的變量都是放在棧內存中的當我們在程序中創建一個對象時,這個對象將被保存到運行時數據區中,以便反復利用因為對象的創建成本通常較大,這個運行時數據區就是堆內存。 上一篇:《javascript高級程序設計》筆記:繼承近幾篇博客都會圍繞著圖中的知識點展開 showImg(https://segmentfault.com/img/bVY0C4?w=1330&h=618);...

    fuyi501 評論0 收藏0
  • 《你不知道的javascript筆記_對象&原型

    摘要:上一篇你不知道的筆記寫在前面這是年第一篇博客,回顧去年年初列的學習清單,發現僅有部分完成了。當然,這并不影響年是向上的一年在新的城市穩定連續堅持健身三個月早睡早起游戲時間大大縮減,學會生活。 上一篇:《你不知道的javascript》筆記_this 寫在前面 這是2019年第一篇博客,回顧去年年初列的學習清單,發現僅有部分完成了。當然,這并不影響2018年是向上的一年:在新的城市穩定、...

    seasonley 評論0 收藏0
  • javascript高級程序設計筆記:繼承

    摘要:繼承和前面兩篇文章中的知識非常相關,如果對函數創建原理和原型鏈不熟悉,請猛戳高級程序設計筆記創建對象高級程序設計筆記原型圖解繼承,通俗的說,就是將自身不存在的屬性或方法,通過某種方式為自己所用文章分別介紹原型鏈繼承繼承借用構造函數繼承組合繼 繼承和前面兩篇文章中的知識非常相關,如果對函數創建原理和原型鏈不熟悉,請猛戳:《javascript高級程序設計》筆記:創建對象《javascri...

    JerryC 評論0 收藏0
  • 讀書筆記(02) - 可維護性 - JavaScript高級程序設計

    摘要:解耦優勢代碼復用,單元測試。常用比較誤區可同時判斷,可用來判斷對象屬性是否存在。使用作判斷無法進行充分的類型檢查。文件中應用常量參考文檔高級程序設計作者以樂之名本文原創,有不當的地方歡迎指出。 showImg(https://segmentfault.com/img/bVburXw?w=500&h=400); 編寫可維護性代碼 可維護的代碼遵循原則: 可理解性 (方便他人理解) 直觀...

    k00baa 評論0 收藏0
  • 讀書筆記(04) - 錯誤監控 - JavaScript高級程序設計

    摘要:項目中我們可通過設置采集率,或對規定時間內數據匯總再上報,減少請求數量,從而緩解服務端壓力。借鑒別人的一個例子只采集上報錯誤參考文檔高級程序設計如何優雅處理前端異常作者以樂之名本文原創,有不當的地方歡迎指出。 showImg(https://segmentfault.com/img/bVbnuud?w=640&h=640); 錯誤類型 即時運行錯誤 (代碼錯誤) 資源加載錯誤 常見...

    Null 評論0 收藏0
  • javascript高級程序設計筆記:變量及變量檢測

    摘要:變量的特點變量是松散類型的,所謂松散類型就是可以用來保存任何類型的數據。 變量的特點 js變量是松散類型的,所謂松散類型就是可以用來保存任何類型的數據。換句話說, 每個變量僅僅是一個用于保存值的占位符而已 js變量可以用來保存任何值,未經過初始化的變量,會保存一個特殊的值—undefined,如:var msg; js變量的初始化并不會為它標記類型;初始化的過程就是給變量賦一個值那...

    XiNGRZ 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<