调用带或不带大括号范围问题的函数

时间:2010-12-03 12:44:53

标签: javascript jquery

在jquery脚本中,我经常看到这样的函数:

var somefunction = function(){
  $(this).doseomething()
}

$(someelement).click( somefunction );

在somefunction this内部接缝以引用所单击的元素。如果使用大括号来调用函数this,则不会拒绝单击的元素。

我个人不喜欢它。我想看看我的代码中使用的东西是否是函数。我更愿意传递this作为论据。这就是我到现在为止所做的:

var somefunction = function($clickedLink){
  $clickedLink.doseomething()
}

$(someelement).click(function(){ somefunction($(this)) });

如果我不使用大括号,为什么我可以访问refared元素?一般来说,调用没有括号的函数是一种好习惯吗?它对性能有影响吗?

1 个答案:

答案 0 :(得分:6)

这不是大括号,它是任何用作事件处理程序的函数,以及jQuery调用事件处理程序的方式(在vanilla JavaScript中也是如此),该函数的上下文将成为事件触发的元素上。

为了更清楚一点,你没有调用没有括号的函数,你传递了对函数的引用。例如,这表示“这是事件发生时运行的功能”:

$(someelement).click( somefunction );

你拥有的另一种方法做了同样的事情,只是增加了一个额外的匿名函数的开销:

$(someelement).click(function(){ somefunction($(this)); });

function() { ... }是您要传递的内容(它是一个匿名函数,而不是您指定的函数)。直到点击事件确实somefunction实际上被称为


你可以这样做,但是它们不等同,当你直接传递函数时,this是元素,第一个参数是event object ...你经常需要停止传播或正确防止默认行为。