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)
答案 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());