2012-07-27 87 views
2

我有一个功能的Javascript,执行功能

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

,我使用置身于另一个回调函数此功能。
当我使用它像

function (params, hideAll) {} 

一切运作良好,但是当我使用

function (params, hideAll()) {}  

一切都不尽如人意!

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

+0

hideAll是一个变量,它正在尝试函数。和hideAll();是执行功能。 – Shreedhar 2012-07-27 07:20:42

回答

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(); 
+0

感谢您的解释! – Ilya 2012-07-27 07:21:33

+0

@Ilya欢迎您。 – Li0liQ 2012-07-27 07:34:10

0

hideAll()不是一个函数,它是执行功能的结果。

function hideAll(){ 
    return 0; 
} 

hideAll() - 数0

hideAll - 功能

0

让我们回来了一下,假设你调用一个方法foo 首先是这样的:

foo(params, hideAll()) {} 

这使用返回值hideAll的为价值

foo(params, hideAll) {} 

采用hideAll功能本身作为值

不过,你真的试图做的是声明功能像这样:

function (params, hideAll()) {} 

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

因此,尽管这两种形式都是合法的函数调用(仍与总不同的含义),后者是不合法的函数声明

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; 
}; 

因此定义一个函数确实接近于分配一个变量