我有一个函数freq01()
,单击按钮时,我希望function(new)
用新参数创建函数freq01()
的副本。我不知道从哪里开始,也不知道JS是否可以从函数创建函数。
所有变量均已创建。请指出正确的方向...!
下面的代码用于将选中的单选按钮值保存到数组中。
function freq01(){
if (document.getElementById("w01").checked){
incFreq = document.getElementById("w01").value;
}
else if (document.getElementById("f01").checked){
incFreq = document.getElementById("f01").value;
}
else if (document.getElementById("m01").checked){
incFreq = document.getElementById("m01").value;
}
}
答案 0 :(得分:0)
我不知道... JS是否可以从一个函数创建一个函数。
要回答问题的这一部分,可以,Javascript可以从函数创建函数。任何函数都可以返回另一个函数,通常的方法是创建一个 factory 函数,或使用函数 currying 来创建新函数:
返回另一个函数的函数。由于Javascript的关闭,您可以设置返回函数可以看到的“私有”变量,但调用函数无法访问:
function addTwoFactory() {
let a = 2;
return function(b) {
return a + b;
}
}
let f1 = addTwoFactory();
let f2 = addTwoFactory();
console.log(f1(3)); // 5
console.log(f2(3)); // 5
还可以创建可配置的工厂,以创建不同种类的方法:
function makeAdder(a) {
return function(b) {
return a + b;
}
}
let addTwo = adderFactory(2);
let addThree = adderFactory(3);
console.log(addTwo(3)); // 5
console.log(addThree(3)); // 6
函数计算是采用具有几个参数的基本函数,并“烘焙”其中一个参数以更轻松地重用的想法:
function adder(a, b) {
return a + b;
}
function makeAdder(a) {
return function(b) {
return adder(a, b);
}
}
let addTwo = makeAdder(2);
console.log(addTwo(3)); // 5
答案 1 :(得分:-1)
您可以尝试使用绑定https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Function/bind
var freq01 = freqBase.bind(null, "w01","f01","m01");
function createNewFunc(i){
return freqBase.bind(null, "w0"+i,"f0"+i,"m0"+i);
}
function freqBase(a,b,c){
if (document.getElementById(a).checked){
incFreq = document.getElementById(a).value;
}
else if (document.getElementById(b).checked){
incFreq = document.getElementById(b).value;
}
else if (document.getElementById(c).checked){
incFreq = document.getElementById(c).value;
}
}
var func2 = createNewFunc(2);
var func3 = createNewFunc(3);
func2();
func2();
func2();
func3();
func2();
其他想法是只返回新功能
var newf1 = function createNewFunc(i){
return function(){ return i;}
}
newf1(1)();
newf1(1)();
newf1(1)();
较短的版本可能是:
a = (i)=> ()=> { return i; }
或更易读
const f2=function createNew(i){
return ()=> { return i; }
};
const res = f2(1)();