函数调用为参数值?

时间:2014-09-23 15:22:36

标签: javascript performance

function fn1() {
   return "hello worl!";
}

function fn2(data) {
   console.log(data)
}

fn2(fn1())

// Calling fn2 function passing(same time calling) fn1 function as an argument.

这是正确的做法吗?还是有其他方法吗?请帮助我。

我已经阅读了一些关于将函数值传递给没有括号的参数的文章。

(或)

我喜欢这个吗?

var f = fn1()
fn2(f)

2 个答案:

答案 0 :(得分:1)

您不能将函数调用作为参数值传递。您可以传递一个函数

fn2(fn1); // logs `function fn1() {…}`

函数调用的结果

fn2(fn1()); // logs `Hello worl!`

当它仅使用一次时,是否使用额外变量来中间存储结果值doesn't really matter

  

我已经阅读了一些关于将函数值传递给没有括号的参数的文章。

是的,这种情况有时会发生,例如当您将处理程序函数传递给addEventListener左右时。在那里你不想调用该函数,而是将函数作为值传递 - 它会产生重要的区别。

在您的情况下,当您想将hello worl! - 字符串传递给日志记录功能时,这是不合适的。您想要调用fn1()函数。

答案 1 :(得分:1)

这取决于。如果fn1()返回的值多次使用,那么在执行var f = fn1()后调用它不是一个坏主意。例如,如果它是长度或数组,距离等,您将多次使用。所以:

var f = fn1();
fn2(f);
fn3(f);
fn4(f);
...

但同样,除非fn1()计算量很大,否则表现可能非常轻微。虽然它只使用f一次,但是没有必要将它存储在变量中:

fn2(fn1());