2012-12-15 92 views
1

说我有一个功能:我可以调用一个函数作为参数吗?

function foo(){ 
    // do a bunch of stuff, manipulate DOM, etc. 
    // and then: 
    if(some_condition) return true; 
    else return false; 
} 

由于这将是很好,既执行功能的“一堆东西”,并在同一时刻使用其返回值,我想知道,如果它是正确的做到这一点:

if(foo()){ // foo happens right here 
    // do some stuff because foo returned true 
} 

这是正确的语法和用法吗?

+0

我不知道,但我非常感兴趣。你应该测试它,并告诉我们它是否工作 –

+0

只是它的正确.. – senK

+3

该语法是正确的,将做你想做的,但不是使用函数作为参数。 (还要注意,如果'some_condition'实际上是一个布尔值,那么你可以说'return some_condition'。) – nnnnnn

回答

1

这绝对没问题。即使foo没有返回布尔值,返回值也会被强制为布尔值,所以在任何情况下都可以。

你在做什么只是不用一个变量代替foo()的返回值。

这将是一个问题的唯一时间是如果foo()返回不同的值,在这种情况下,如果您希望该值在整个代码中保持不变,则必须将返回值设置为变量并使用该变量。

顺便说一句,这是javascript的基础知识之一。除非你刚刚开始,否则你应该知道这一点。

哦,正如人们在评论中所说的那样,这并没有使用函数作为参数。 使用函数作为参数会做这样的:

function bar(a) { 
    // do something with a 
} 
function foo(){ 
    // blah blah blah 
} 
var thing = bar(foo); // notice no parentheses `()` after foo 
// do something with thing 
+0

虽然我没有使用函数本身作为参数,但我正在调用函数,所以它返回一个参数。如果你可以提出一个更好的措辞,我很乐意编辑它。 –

0

似乎好给我吗?您没有使用一个函数作为参数,你只是这样做:

var ret = foo(); 
if(ret){  
} 

可能有些浏览器可能会做两个和一个非常低的水平之间的优化。 (我想可能是因为在你的情况下,其他地方没有使用返回值。)

但是这个想法/语义保持不变。

1

像其他人一样表示它会按照您的预期工作。我只想提出一个优化:

function foo(){ 
    // do a bunch of stuff, manipulate DOM, etc. 
    // and then: 
    return !!some_condition; 
} 

如果some_condition是truthy值(1,​​,{}[]),那么!!some_condition会表达true。否则它会表示false

然后你可以使用它作为你想:

if (foo()) { // foo happens right here 
    // do some stuff because foo returned true 
} 
相关问题