Javascript 在页面加载时调用的函数不是jquery。单击

Javascript 在页面加载时调用的函数不是jquery。单击,javascript,jquery,Javascript,Jquery,此函数在页面加载时调用,而不是在单击.somebutton时调用。我不知道为什么。我希望能够传递变量,以便我可以在多个具有不同值的位置使用此函数。多谢各位 var i = "this be i"; var u = "this be u"; function dosomething (var1, var2){ console.log(var1 + " and " + var2); } $(".somebutton").click(dosomething(i,u)); 您正在将doso

此函数在页面加载时调用,而不是在单击.somebutton时调用。我不知道为什么。我希望能够传递变量,以便我可以在多个具有不同值的位置使用此函数。多谢各位

var i = "this be i";
var u = "this be u";

function dosomething (var1, var2){
    console.log(var1 + " and " + var2);
}

$(".somebutton").click(dosomething(i,u));

您正在将
dosomething(i,u)
返回的值传递给
单击
处理程序。这就是为什么它不用点击就可以执行,只要你调用你的函数它就会发生(也就是说:
dosomething(i,u)
)。您需要将函数调用包装在匿名函数中:

$(".somebutton").click(function() { dosomething(i,u); } );

您只能使用示例中的方法(即不带参数)通过引用传递函数。函数在加载时工作的原因是,由于后面的
()
括号,它会立即被调用

如果需要传递参数,则需要将其包装在匿名函数中,如下所示:

// on click:
$(".somebutton").click(function() {
    dosomething(i, u);
});

// on page load:
dosomething(i, u);
在JavaScript中

$(".somebutton").click(dosomething(i,u));
不会将函数分配给单击事件,而是调用函数并分配函数返回的任何结果。您需要引用您的函数:

$(".somebutton").click(dosomething);
如果需要将变量传递给函数,则需要将所述函数包装到另一个匿名函数中:

$(".somebutton").click(function() { dosomething(i, u); });

fiddle或not existyeah,我没有看到外部声明的变量。谢谢,这是我第一次真正理解为什么这种行为有意义。