我有以下这些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”

我该如何解决?

最佳答案

您正在进行所谓的闭包,因此无法(通过设计)访问它。改用此方法(还有一些其他改进...

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()方法。

希望这可以帮助!

09-30 22:30