我是一名编码新手,正在寻求建议。
在动画循环中,我有一组函数,根据变量值执行。这意味着我实际上每帧都会检查值并执行相关联的函数。
由于变量的值仅在用户输入时更改,因此我想将if-else语句从动画循环中取出。我在思考是否可以将相关函数“分配”给另一个在循环中运行但能够更改其内容的函数。
对此有什么想法吗? :-)
我是一名编码新手,正在寻求建议。
在动画循环中,我有一组函数,根据变量值执行。这意味着我实际上每帧都会检查值并执行相关联的函数。
由于变量的值仅在用户输入时更改,因此我想将if-else语句从动画循环中取出。我在思考是否可以将相关函数“分配”给另一个在循环中运行但能够更改其内容的函数。
对此有什么想法吗? :-)
JavaScript中的函数是对象。这意味着变量可以引用函数。¹
因此,如果你有函数a
、b
和c
,你可以有一个current
变量引用当前正在使用的函数,例如a
:
let current = a;
如果后来情况有所改变,您可以更新current
以引用b
:
current = b;
a
或b
一样使用current
:current(/*arguments go here if any*/);
实例展示:
const btnCall = document.getElementById("btnCall");
let current;
useA();
function a() {
console.log("Function `a` called");
}
function b() {
console.log("Function `b` called");
}
function useA() {
current = a;
btnCall.value = "Call a";
}
function useB() {
current = b;
btnCall.value = "Call b";
}
hook("btnCall", () => {
current();
});
hook("btnUseA", useA);
hook("btnUseB", useB);
function hook(id, fn) {
document.getElementById(id).addEventListener("click", fn);
}
<input type="button" value="Call ?" id="btnCall">
<input type="button" value="Use a" id="btnUseA">
<input type="button" value="Use b" id="btnUseB">
还可以在 CodePen 上找到这个例子(很多人现在无法使用片段)。
¹ 事实上,只要你不使用对象属性来引用函数,你就一直在使用一个“变量”(更准确地说是 绑定)来引用函数。当你执行以下操作时:
function example() {
}
当你创建一个函数和一个变量在当前作用域中引用该函数时,像这样的函数声明所创建的变量实际上与var
变量相同。变量(var
,let
),常量(const
)和函数参数都是保存值的绑定,包括对对象(如函数)的引用。
不确定这会不会对你有所帮助,但你可以尝试一下。创建一个对象来存储你想要的函数,每个函数的键应该是输入值的值。
例如:let obj = {
someValue : function1,
someOtherValue: function2
}
function function1(){
console.log('function 1')
}
function function2(){
console.log('function 2')
}
function getUserInput(value){
obj[value]();
}
getUserInput('someValue');
getUserInput('someOtherValue');
if(myValue=="doThisFunction") thisFunction()
这样吗,还是其他什么? - B''H Bi'ezras -- Boruch Hashem