Javascript 为什么jquery事件代码总是需要包装在函数中?

Javascript 为什么jquery事件代码总是需要包装在函数中?,javascript,jquery,Javascript,Jquery,我有两个文件index.php和settings.php。 在index.php上有一个按钮,单击该按钮可将用户重定向到settings.php <div id="settings"> Settings </div> <script> $("#settings").on ( "click", function() { window.location.href = "settings.php"; } );

我有两个文件
index.php
settings.php
。 在
index.php
上有一个按钮,单击该按钮可将用户重定向到
settings.php

<div id="settings">
    Settings
</div>

<script>
$("#settings").on
(
    "click",
    function()
    {
        window.location.href = "settings.php";
    }
);
</script>
<div id="menü">
    Menü
</div>

<script>
$("#menü").on("click", redirect("index.php"));

function redirect(url)
{
    window.location.replace(url);
}
</script>
但是如果我点击“设置”按钮,那么
Settings.php
正在加载,我会立即再次被重定向到
index.php

但是,如果我使用此代码,则它不会立即重定向:

$("#menü").on("click", function() { redirect("index.php");});

如果我使用这样的事件,为什么总是需要将所有内容包装在
function()
中?

函数.on()的第二个参数应该是回调函数或匿名函数。因此,在您的例子中,第二个参数是函数调用,因此它将直接调用函数,而无需等待单击事件立即触发该功能是。因此,您要么需要将其包装在
function(){..}
中,要么可以执行
$(“#menu”)。在(“单击”{url:“index.php”},重定向)
并读取传递给
重定向
函数的参数。CSS定制的简单链接也可以做同样的事情,更自然,不需要任何脚本。做尽可能简单的事情。为什么是函数?方法上的
声明为接受回调函数。实际上,您可以创建一个函数来为您生成重定向函数。LOL
function redirectTo(url){return function(){redirect(url);};}
并像这样使用它。
$('blah')。单击(redirectTo('index.php'))
很酷,感谢@YuryTarabankoI提供的提示,我相信这是
函数重定向(event){var url=event.data.url;}
,因此,您可以通过
event.data
检索事件中作为参数传入的内容。