iT邦幫忙

0

JS_函式作為頭等物件( First-Class Functions)

  • 分享至 

  • xImage
  •  

函式是頭等物件,如同其他物件一樣可以
- 藉由 實質 建立
- 指派給 變數屬性
- 被當作 參數 傳遞
- 作為函式執行結果回傳回來
- 設定屬性方法

  • 回呼函式是其他程式碼在稍後『回呼』的函式,經常被使用到,特別是在處理事件時。
  • 函式可以擁有 屬性,並且在那些屬性 可以用來 儲存 任何資訊:
    • 在函式屬性中存函式,以供稍後引用和呼叫
    • 可以使用函式屬性來建立 暫存,避免不必要的計算
  • 多種函式定義方式:
    • 宣告函式函式表達式箭頭函式函式生成器
    • 函式宣告,必須有一個名稱,並必須作為 獨立 的敘述句
    • 函式表達式,則無需命名,但必須是另外一個程式碼的敘述句的一部分
    • 箭頭函式,是JS新功能,用更簡潔方式定義函式
    • 參數 是我們定義函式時所列出來的變數,而 引數 是我呼叫它時,傳遞給函式的值
    • 函式的參數和他的引數,可以有不同的數目:
      • 未指派的參數會被視為undefined
      • 多餘的引數,不會指派給任何一個參數
    • 不定參數預設參數 是JS的新功能:
      • 不定參數,能夠引用未具有相對應名稱的多餘引數
      • 預設參數,能夠『指定』預設的參數值,以便在呼叫函式,但未提供參數值時使用

使用函式與否的差異為何?

  • 函式重要的原因在於,模組化執行單元
  • 擁有 多樣功能強固結構 函式,會在開發時有很大的 靈活性和控制權
  • 物件具有某些特性:
    • 藉由 實質 來建立。{}
    • 可以被指派給 變數陣列資料 ,或其他物件的屬性
    • 可作為 引數 傳遞給函式
    • 可以作為 函式的回傳值
    • 擁有可 動態 建立和 指派的屬性
EX:
////可以被指派給 `變數`、`陣列資料` ,或其他物件的屬性。
var ninja = {};
ninjaArray.push({});
ninja.data= {};

////可作為 `引數` 傳遞給函式。
function hide(ninija){
ninja.visiblity = false; 
//將傳遞進來的物件的 `visiblity` 屬性設置為 `false`
}
hide({}); // 傳遞一個空物件給 `hide` 函式

////可以作為 `函式的回傳值`
function returnNewNinja(){
return{}; // 返回一個空物件
}

////擁有可 `動態` 建立和 指派的屬性
var ninja = {};
ninja.name = "Hanzo";
// 動態為物件添加一個 `name` 屬性,並將其設置為 "Hanzo"

函式作為頭等物件( First-Class Functions)

//// 藉由 `實質` 來建立
function ninjaFunction(){}

////可以被指派給 `變數`、`陣列資料` ,或其他物件的屬性。
var ninjaFunction = function(){};
ninjaArray.push(function(){}); // 在陣列中推送一個空函式
ninja.data = function(){}; // 在物件中創建一個名為 `data` 的屬性,並指派一個空函式

////可作為 `引數` 傳遞給函式。
function call(ninjaFunction){
ninjaFunction(); // 呼叫傳遞進來的函式
}
call(function(){}); // 傳遞一個空函式給 `call` 函式

////可以作為 `函式的回傳值`
function returnNewNinjaFunction(){
return function(){}; // 返回一個空函式
}

////擁有可 `動態` 建立和 指派的屬性
var ninjaFunction = function(){};
ninjaFunction.ninja = "Hanzo";
//在函式上動態添加一個 `ninja` 屬性,並將其設置為 "Hanzo"
////指派給變數
const add = function(a, b) {
    return a + b;
};
const operation = add;
console.log(operation(2, 3));  // 輸出:5

////作為函式引數傳遞
function doOperation(a, b, operation) {
    return operation(a, b);
}
console.log(doOperation(4, 2, add));       // 輸出:6
console.log(doOperation(4, 2, multiply));  // 輸出:8

////作為函式的回傳值
function createMultiplier(factor) {
    return function(x) {
        return x * factor;
    };
}
const double = createMultiplier(2);
console.log(double(5));  // 輸出:10

參考:

忍者2


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言