我有下一个功能
var hideAll = function() {
// code
return ///...
};
我在另一个函数中使用此函数就像回调一样 当我使用它时
function (params, hideAll) {}
一切运作良好,但在我使用时
function (params, hideAll() ) {}
一切都不顺利!
所以我的问题是,hideAll
和hideAll()
函数执行之间有什么区别?
答案 0 :(得分:3)
hideAll
- 这是对函数
的引用
hideAll()
- 这是函数的执行,结果
function (params, hideAll) {}
是一个正确的函数定义,
而function (params, hideAll() ) {}
不是 - 你无法在函数定义中调用另一个函数。
但是,您仍然可以编写以下有效代码:
var hideAll = function() {
// code
return ///...
};
var functionWithCallback = function(callback){
callback();
}
var closureReferringHideAll = function(){
hideAll();
}
// The following two lines will do exactly the same in current context,
// i.e. execute hideAll.
functionWithCallback(hideAll);
closureReferringHideAll();
答案 1 :(得分:0)
hideAll()不是函数,它是执行函数的结果。
function hideAll(){
return 0;
}
hideAll() - 数字0
隐藏所有 - 功能
答案 2 :(得分:0)
让我们退一步,假设你会调用方法foo
首先是这样的:
foo(params, hideAll() ) {}
这使用hideAll的返回值作为值
,而
foo(params, hideAll) {}
使用hideAll函数本身作为值
但是,您实际尝试做的是声明这样的函数:
function (params, hideAll() ) {}
这没有任何意义。你不能声明一个与参数列表中的参数不同的函数。
因此,虽然两种形式对于函数调用是合法的(仍然具有完全不同的含义)后者对于函数声明
是不合法的答案 3 :(得分:0)
在Javascript和许多其他语言中,函数是“第一类对象”,这意味着您可以调用/执行函数,但也可以将函数存储在变量或数组中,或者可以将函数传递给另一个功能。
请注意,我不是在谈论传递调用函数所产生的值...而是函数本身。考虑:
function test10(f) {
for (var i=0; i<10; i++)
alert(f(i));
}
function square(x) { return x*x*; }
function cube(x) { return x*x*x; }
test10(square);
test10(cube);
最后两行是将函数(square
和cube
)作为函数test10
的参数传递。
()
语法告诉Javascript您要进行调用,不仅可以用于函数名,还可以用于任何表达式,如变量或数组元素......例如:
var f_arr = [square, cube];
for (var i=0; i<2; i++)
alert(f_arr[i](i+42)); // Will call square(42) and cube(43)
实际上是在Javascript中的代码
function square(x) {
return x * x;
}
与
不同但相似square = function(x) {
return x * x;
};
所以定义一个函数确实接近于赋值变量