gpt4 book ai didi

两个函数的Javascript回调

转载 作者:行者123 更新时间:2023-11-30 14:49:48 25 4
gpt4 key购买 nike

有没有办法用 Javascript (ES6) 实现下面的代码?

如果是,我该怎么做?我试过这个例子,但没有成功。

const funcA = (callback, arg1) => {
console.log("Print arg1: " + arg1); /* Print arg1: argument1 */
let x = 0;
x = callback(x, );
return x;
}

const funcB = (x, prefix) => {
console.log("Print prefix: " + prefix); /* Print prefix: PREFIX_ */
x = x + 1;
return x;
}

/* Exec function funcA */
let x = funcA(funcB( ,"PREFIX_"), "argument1");
console.log("Value of x: " + x); /* Value of x: 1 */

最佳答案

这是一种使用定义的占位符作为符号来标识尚未设置的参数的方法。

它具有一个 this 对象,该对象绑定(bind)到调用函数以进行进一步检查和评估。

如果arguments object的组合数组并且 this.arg 没有更多的 placeholder 项,函数被调用并返回函数调用。

如果没有,新的参数数组将绑定(bind)到函数并返回。

[?] denotes the placeholder symbol

 funcB    x    prefix       this.args        args       action
------- --- --------- ------------- -------------- ------------------------------
1. call [?] "PREFIX_" [?], "PREFIX_" return calling fn w/ bound args
2. call 0 [?] [?], "PREFIX_" 0, "PREFIX_" return fn call with args
3. call 0 "PREFIX_" return 1

(当然它可以更短一些并委托(delegate)给另一个函数,但它是一个概念证明。)

function funcA(callback, arg1) {
console.log('funcA', callback, arg1)
return callback(0, placeholder);
}

function funcB(x, prefix) {
var args = this && this.args || [],
temp = Array.from(arguments);

console.log('funcB', isPlaceholder(x) ? '[?]' : x, isPlaceholder(prefix) ? '[?]' : prefix);

// placeholder part
if (temp.some(isPlaceholder)) {
temp.forEach((a, i) => isPlaceholder(a) && i in args || (args[i] = a));
return args.some(isPlaceholder)
? funcB.bind({ args })
: funcB(...args);
}

// origin function body
return x + 1;
}

const
placeholder = Symbol('placeholder'),
isPlaceholder = v => v === placeholder;

console.log("Value of x: " + funcA(funcB(placeholder, "PREFIX_"), "argument1"));

关于两个函数的Javascript回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48327804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com