2

我有下一个功能

  var hideAll = function() {
    // code  
    return ///...  
  };  

我在另一个函数中使用这个函数,就像回调一样。
当我使用它时

function (params, hideAll) {}  

一切正常,但是当我使用

function (params, hideAll() ) {}    

一切都不好使!

hideAll所以我的问题是,函数执行和函数执行有什么区别hideAll()

4

4 回答 4

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();
于 2012-07-27T07:19:10.843 回答
0

让我们退后一步,假设您foo 首先会像这样调用一个方法:

foo(params, hideAll() ) {}

这使用 hideAll 的返回值作为值

然而

foo(params, hideAll) {}

使用 hideAll 函数本身作为值

但是,您实际上尝试做的是声明这样的函数:

function (params, hideAll() ) {}

这是没有意义的。您不能声明与参数列表中的参数不同的函数。

因此,虽然这两种形式对于函数调用都是合法的(仍然具有完全不同的含义),但后者对于函数声明是不合法的

于 2012-07-27T07:23:59.577 回答
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);

最后两行将函数 (squarecube) 作为参数传递给 function 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;
};

所以定义一个函数确实接近于分配一个变量

于 2012-07-27T07:42:54.917 回答
0

hideAll()不是函数,它是执行函数的结果。

function hideAll(){
    return 0;
}

hideAll() - 数字 0

hideAll - 功能

于 2012-07-27T07:20:04.200 回答