Javascript,执行功能

时间:2012-07-27 07:17:42

标签: javascript

我有下一个功能

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

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

function (params, hideAll) {}  

一切运作良好,但在我使用时

function (params, hideAll() ) {}    
一切都不顺利!

所以我的问题是,hideAllhideAll()函数执行之间有什么区别?

4 个答案:

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

最后两行是将函数(squarecube)作为函数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;
};

所以定义一个函数确实接近于赋值变量