следующая функция берет объект и возвращает функцию. функция, которую она возвращает, является функцией более высокого порядка, которая принимает функцию обратного вызова.
const deconstruct = function (object) {
const declarations = Object.entries(object).reduce(function (string, entry) {
const key = entry[0];
const value = entry[1];
const declaration = "const " + key + " = " + value + ";";
return string + declaration;
}, "");
const execute = function (callback) {
return Function(
declarations
+ "return "
+ callback.toString()
+ "();"
)();
};
return execute;
};
execute
увеличивает callback
, делая ее частью новой функции. новая функция объявляет константы, запускает callback
и возвращает результат. поскольку в новой функции объявленные константы и callback
находятся в одной и той же области, callback
может получить доступ к этим константам, тем самым эффективно вводя эти константы в область действия callback
. Вот пример вызова deconstruct
.
deconstruct({
a: 0,
b: 1,
c: 2
})(function () {
console.log(a, b, c); // 0 1 2
});
, но есть ли другой способ ввести переменные в область действия функции без использования промежуточных строк, как это делает мой код?