Javascript,执行函数

Javascript, execute function

本文关键字:函数 执行 Javascript      更新时间:2024-03-05

我有下一个函数

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

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

function (params, hideAll) {}  

一切都很好,但当我使用时

function (params, hideAll() ) {}    

一切都不顺利!

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

hideAll-这是对函数的引用
hideAll()-这是函数的执行,其结果

function (params, hideAll) {}是一个正确的函数定义,
而CCD_ 6不是-您不能调用函数定义中的另一个函数。

然而,您仍然可以编写以下有效代码:

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

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

function hideAll(){
    return 0;
}

hideAll()-数字0

hideAll-函数

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

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

让我们退一步,假设您将调用一个方法foo第一个是这样的:

foo(params, hideAll() ) {}

这使用hideAll的返回值作为值

foo(params, hideAll) {}

使用hideAll函数本身作为值

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

function (params, hideAll() ) {}

这毫无意义。不能用与参数列表中的参数不同的任何东西来声明函数。

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

函数声明是不合法的