Функции как переменные - PullRequest
0 голосов
/ 14 сентября 2018

Может ли кто-нибудь поделиться некоторыми знаниями о том, как использовать функцию как переменную в 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 голосов
/ 14 сентября 2018

Сводка:

В 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 свойства, которые являются функциями (методы, связанные с объектом).

0 голосов
/ 14 сентября 2018

(лямбды по определению являются анонимными функциями, это то, что я имею в виду под "функциями как переменными")

Это не то, как лямбды работают на 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); };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...