This question already has answers here:
Why does click event handler fire immediately upon page load?
                            
                                (4个答案)
                            
                    
                2年前关闭。
        

    

方案1:

$(function () {
    $('#disp_body').on('change', '#image', showMyImage(this));
});


如果我直接调用函数showMyImage,它将在页面加载本身上调用。

方案2:

但是如果我通过闭包函数调用。该事件已正确侦听和处理。所以它工作正常。

$(function () {
    $('#disp_body').on('change', '#image', function() {
        showMyImage(this);
    });
});


我真的很想知道为什么场景1不能正常工作,而场景2却不能正常工作。

最佳答案

此答案是相关的:https://stackoverflow.com/a/7102440/7316502

在情况1中,您正在调用一个函数,并将其返回值作为回调传递给更改侦听器。这会导致showMyImage的过早执行。

在第二种情况下,您传递了一个用作回调的函数,但没有直接调用它。这允许更改侦听器调用它,并根据需要在更改事件上调用showMyImage

09-05 22:09