在Javascript中引用外部函数(使用jQuery)

时间:2014-04-03 15:07:06

标签: javascript jquery

我有这些javascript代码行在页面加载时运行:

(function my_function() {
    //my stuff
})();

$("select#myselect").change( function() {
    if ($('select#myselect').val() == '1') {
        timer = setTimeout(my_function, 1000*5); //this line throws the error
    } else {
        if(typeof timer !== 'undefined'){
            clearTimeout(timer);
        }
    }
});

当执行突出显示的行时,它会抛出: “未捕获的ReferenceError:my_function未定义”

我该如何解决?

3 个答案:

答案 0 :(得分:1)

尝试改变这一点:

(function my_function() {
    //my stuff
})();

对此:

function my_function() {
    //my stuff
}
my_function();

编辑:您的函数my_function在全局范围内无法调用,因为此模式会创建本地范围。阅读this优秀的wiki文章了解更多信息。

答案 1 :(得分:1)

看起来你正试图先运行my_function,然后再用计时器再次运行它。

function my_function() {
    //my stuff
}
my_function();

$("select#myselect").change( function() {
    if ($('select#myselect').val() == '1') {
        timer = setTimeout(my_function, 1000*5); //this line throws the error
    } else {
        if(typeof timer !== 'undefined'){
            clearTimeout(timer);
        }
    }
});

答案 2 :(得分:0)

你有什么称为闭包,你无法访问它(按设计)。试试这个(还有一些额外的改进...

function my_function() {
    //my stuff
}

// Call your function...
my_function();

var $mySelect = $("select#myselect");

$mySelect.on("change", function() {
    if ($mySelect.val() == '1') {
        timer = setTimeout(my_function, 1000*5); //this line throws the error
    } else {
        if(typeof timer !== 'undefined'){
            clearTimeout(timer);
        }
    }
});

我还将select#myselect的查找缓存到变量中......因为它会提高性能(诚然,略有差异)。此外,我为您的更改活动使用了更首选和更新的on()方法。

希望这有帮助!