用作变量

时间:2018-09-13 21:12:09

标签: javascript function variables callback

有人可以在JavaScript中使用函数作为变量的目的分享一些知识吗?

如果我有以下代码段

var error = function(param){
  /*Some coode*/
}

如何将上述函数中的参数作为回调函数传递

onWorkFail(error)//how to pass value for param ??

在以下示例中, 这里的operationCallback是变量吗?这样声明的目的是什么?他们在哪里派上用场?我已经看到这些东西让我的许多开发人员使用,但是还无法弄清它的重要性。

var operationCallback =  {
      onsucess: function([some parameters]){
    },
    onfailure:failureFunction
}
function failureFunction(){
   /*some code here*/
}


function performOperation(){
    doSomeTask(operationCallback);
}

2 个答案:

答案 0 :(得分:1)

摘要:

在javascript函数中可以通过两种方式声明:

功能声明:

function foo () {}

函数表达式:

const foo = function () {}

将函数作为变量传递的符号称为函数表达式。 表达式只是一行计算结果为值的代码。在这种情况下,该值为功能对象。这是所有可能的,因为在javascript函数中是头等公民。这意味着可以像其他任何数据一样传递函数(例如,参数或变量)。

为什么有用?

当我们将函数存储在变量中或将其作为参数传递时,我们可以创建高阶函数。高阶函数是将函数作为参数或返回函数(或两者)的函数。这在各种情况下都非常有用,并且JS甚至内置了一些非常方便的高阶函数。例如map

const arr = [1,2,3];

const doubleArr = arr.map((el) => el * 2);

console.log(doubleArr);

在上面的示例中,map函数接受一个回调,该回调在数组的每个元素上执行,然后返回一个新的数组。


在您的示例中:

var operationCallback =  {
      onsucess: function([some parameters]){
    },
    onfailure:failureFunction
}

operationCallback是一个对象。在此对象上有2个属性,它们都是函数(与该对象关联的方法)。

答案 1 :(得分:-1)

(Lambda是按定义的匿名函数,我认为您所说的“函数作为变量”)

lambda并不是JavaScript的工作方式,请看以下示例:

var displayClosure = function() {
    var count = 0;
    return function () {
        return ++count;
    };
}
var inc = displayClosure();
inc(); // returns 1
inc(); // returns 2
inc(); // returns 3

代码作者:谢尔盖·伊林斯基ref

var myButton = document.getElementById("myButton");
var myMessage = "it's working";
myButton.onclick = function() { alert(myMessage); };