这个函数是递归的吗?

时间:2018-04-25 10:49:41

标签: javascript recursion

我可以在handleMsg内将handleMsg应用于onclick处理程序而不会出现递归问题吗?

var state = 0;    

var handleMsg = function(num) {
    state = state + num;

    render(
        h("div", [
            if ((state % 2) == 1) {
                h("span", "the number is odd!"),
            } else {
                h("span", "the number is even!"), 
            }   
            h("button", {onclick: function(){ handleMsg(1) }}, "increment"),
            h("button", {onclick: function(){ handleMsg(-1) }}, "decrement"),
        ])
    );
};

2 个答案:

答案 0 :(得分:2)

onclick绑定到:

{onclick: handleMsg(1)}

您正在分配调用handleMsg的结果,这可能会导致无限递归。

我想你想在点击时调用这个函数,所以用:

{onclick: () => handleMsg(1)}

没有箭头功能,可以通过以下方式完成:

{onclick: function () { handleMsg(1) }}

或@DontVoteMeDown发布:

{onclick: handleMsg.bind(null, 1)}

答案 1 :(得分:2)

我相信你可以,但你需要改变你绑定点击事件的方式。如果您喜欢这样,handleMsg(1)将在那里执行该功能,而不是在click事件中执行。要使用参数绑定函数,必须使用.bind

onclick: handleMsg.bind(null, 1)