0

我想在另一个函数中使用一个变量,但没有定义!我用这个和var尝试过。我怎样才能让它在另一个函数中定义?在下面的代码中,我想在“next”中将 actionInt 添加 1,但它没有定义。任何想法?

        func1 : function(event) {

            if (action == "test"){
                console.log(test clicked);
            }


            else if (action == "test2"){

                console.log(test2 clicked);
            }



        },
4

2 回答 2

1

那是因为actionInt在这一行中声明了:

var actionInt = parseInt(action);

并且您正在递增this.actionInt++this调用上下文在哪里,由临时确定(可能是您附加事件侦听器的对象)。
我强烈建议您阅读JS 中this实际引用的内容,就像我还建议您在使用时指定基数parseInt一样,并意识到这没有意义:

actionInt = parseInt(action, 10);//action is number?
if (action === 'next')//action is string?

如果actionnextor previousparseInt将始终返回NaN,当递增时,仍然是NaN(Not A Number + 1 is Not A Number)

但是无论你怎么看,我认为你实际上是在寻找一个闭包:

onPageClick : (function(actionInt)
{
    return function(event)
    {
        var action = event.target.innerHTML;
        this.loadPage(actionInt, 25);//what is this?
        if (action == "Next"){
            console.log(actionInt++);//no this
        }
        else if (action == "previous"){
            console.log(actionInt--);
        }
    };
}(0)),//pass initial actionInt value here

有关JS如何解析表达式/变量名称以及闭包如何工作的详细信息,请参阅this answer
... 如果actionInt是全局变量,则可以省略IIFE,只需使用actionInt,默认情况下它将解析为全局变量(或抛出如果未在严格模式下定义,则会出错)

于 2013-09-19T13:43:45.417 回答
0

在您的情况下,这指的是全局范围(可能)-window对象。

在这种情况下,您无需使用this.variable = 0,只需使用var variable = value;

于 2013-09-19T13:34:41.510 回答