2017-06-16 153 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

我的不好,我是过度的。非常感谢你。 –