2017-06-16 154 views
0

我想了解這種情況下的函數調用,state如何在addView函數定義(這些函數之間的鉤子)中將viewFunc解析並將defaultData作爲函數參數?javascript函數執行

var defaultData = { 

    property: [ 
    { 
     name: 'Adam', 
     type: 'javascript' 
    }, 
    { 
     name: 'Tom', 
     type: 'Typescript' 
    } 
    ] 
}; 

function addView(viewFunc){ 
    console.log(" 1. Step I"); 
    viewFunc(defaultData); 
    console.log(" 2. Step III "); 
} 

addView((state)=>{ 
    console.log(" 3. Step II & lenght of data set : "+state.property.length); 
}) 

輸出:

1. Step I 
3. Step II & lenght of data set : 2 
2. Step III 
+1

不知道我明白這個問題(或爲什麼你不確定)。 *您*將'defaultData'傳遞給回調:'viewFunc(defaultData);'。這就是它如何得到它的價值。這與任何其他函數調用相同。 –

回答

2

在JavaScript中,功能可以作爲參數傳遞給其他函數。調用addView時,您正在執行的操作是:創建一個匿名函數並將其傳遞給addView函數。

viewFunc變量現在包含對匿名函數的引用。像任何其他函數引用一樣,您可以使用參數調用它。當您將對defaultData對象的引用傳遞給傳入addView函數的函數時,這就是您正在做的事情。

作爲參數傳遞給其他函數或從另一個函數返回的函數引用被稱爲first-class functions

+0

感謝您的好解釋,但匿名函數不會引用任何參數,但匿名函數('viewFunc')的引用可以,但不會拋出任何異常? –

+0

你是什麼意思?匿名函數*會*取一個參數,並將其命名爲'state'。你的代碼是有效和正確的。 – PeterMader

+0

我的不好,我是過度的。非常感謝你。 –