在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元素?一般来说,调用没有括号的函数是一种好习惯吗?它对性能有影响吗?
答案 0 :(得分:6)
这不是大括号,它是任何用作事件处理程序的函数,以及jQuery调用事件处理程序的方式(在vanilla JavaScript中也是如此),该函数的上下文将成为事件触发的元素上。
为了更清楚一点,你没有调用没有括号的函数,你传递了对函数的引用。例如,这表示“这是事件发生时运行的功能”:
$(someelement).click( somefunction );
你拥有的另一种方法做了同样的事情,只是增加了一个额外的匿名函数的开销:
$(someelement).click(function(){ somefunction($(this)); });
function() { ... }
是您要传递的内容(它是一个匿名函数,而不是您指定的函数)。直到点击事件确实somefunction
实际上被称为。
你可以这样做,但是它们不等同,当你直接传递函数时,this
是元素,第一个参数是event
object ...你经常需要停止传播或正确防止默认行为。