我对编码还很陌生,我正在寻找建议。
我在动画循环中有一组函数,这些函数根据变量值执行。这意味着我实际上是在检查每帧的值并执行相关的功能。
由于变量的值仅在用户输入时发生变化,因此我正在考虑将if else-语句移出动画循环。我想知道是否可以将关联的功能“分配”给另一个在循环中运行但可以更改其内容的功能。
对此有何想法? :-)
答案 0 :(得分:5)
JavaScript中的函数是对象。这意味着变量可以引用函数。¹
因此,如果您具有函数a
,b
和c
,则可以有一个current
变量引用当前使用的变量,例如, a
:
let current = a;
稍后,如果情况有所变化,则可以更新current
以引用b
:
current = b;
无论哪种方式,然后使用current
就像使用a
或b
一样:
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">
Also on CodePen(目前很多人都在摘录)。
¹实际上,每当您不使用对象属性来引用函数时,总是使用“变量”(更准确地说是 binding )来引用函数。功能。当您这样做时:
function example() {
}
...您正在创建一个函数和一个在当前作用域中引用该函数的变量。像这样的函数声明创建的变量实际上与var
变量相同。变量(var
,let
),常量(const
)和函数参数都是保存值的绑定,包括对诸如函数之类的对象的引用。 / p>
答案 1 :(得分:1)
不确定是否会帮助您,但是您可以尝试一下 创建一个包含所需值的函数的对象,每个函数的键应为输入中的值。 例如:
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');