Javascript 说到jQuery语法,我能做些什么?

Javascript 说到jQuery语法,我能做些什么?,javascript,jquery,syntax,Javascript,Jquery,Syntax,我看到这个应用很多: $("img").hide( 800, function() { $(this).show(); }); $(this).hide(); element.click(function() { notify(); }); …但我们能得到同样的效果吗 $("img").hide( 800, "$(this).show();" ); this.hide(); element.click(notify); 我看到这个应用很多: $("img").hid

我看到这个应用很多:

$("img").hide( 800, function() {
    $(this).show();
});
$(this).hide();
element.click(function() {
    notify();
});
…但我们能得到同样的效果吗

$("img").hide( 800, "$(this).show();" );
this.hide();
element.click(notify);

我看到这个应用很多:

$("img").hide( 800, function() {
    $(this).show();
});
$(this).hide();
element.click(function() {
    notify();
});
…但我们能得到同样的效果吗

$("img").hide( 800, "$(this).show();" );
this.hide();
element.click(notify);
……这个怎么样:

$("this").hide();

我看到这个应用很多:

$("img").hide( 800, function() {
    $(this).show();
});
$(this).hide();
element.click(function() {
    notify();
});
…但我们能得到同样的效果吗

$("img").hide( 800, "$(this).show();" );
this.hide();
element.click(notify);
我的观点:

$("img").hide( 800, function() {
    $(this).show();
});
$(this).hide();
element.click(function() {
    notify();
});

我们通常使用的jQuery方法是否有更简单的版本?

实际上,这两种方法是不同的:

element.click(notify);

element.click(function() {
    notify();
});
第一个将在通过该行时执行函数notify(使用调试器检查)。它还将执行明显的-附加单击事件。第二个函数在将该函数附加到click事件时不调用notify

至于其他差异——它们不是jQuery的差异,而是Javascript语法的差异。这里有相当多的不一致之处——很多都来自浏览器支持,以及它们如何实际实现官方的ECMAscript、DOM和其他扩展 实际上不会做任何事情,我想你的意思是
$(this).hide()

this.hide()您需要更深入地了解jQuery的工作原理以及DOM的工作原理
$(this)
在大多数情况下,将本机DOM元素
this
的值包装到jQuery对象中。普通DOM元素没有隐藏方法

例如,您无法执行
document.getElementsByTagName('body')[0].hide()
,因为DOM body元素没有hide方法。jQuery将元素包装到一个jQuery对象中,该对象本质上是一个数组,包含许多很酷的方法,如
hide()

$(“this”).hidethis
关键字是特殊的,与字符串
“this”
无关

这是一个基于误解原则的模糊问题,我认为这是一个很好的例子,说明了为什么您应该专注于学习Javascript,而不是jQuery

…但我们能得到同样的效果吗

$("img").hide( 800, "$(this).show();" );
this.hide();
element.click(notify);
$(“img”).hide(800,“$(this.show();”)

不,你不能。如果的第二个参数是字符串,那么它应该是一个宽松的参数,
“$(this).show();”
不是宽松的参数;所以
$(“img”).hide(800,“$(this.show();”)
只会将无法理解的错误放入控制台,甚至不会隐藏任何内容

如果您看到以下内容:

$(this).hide;
使用了很多,然后你看到了很多无用的代码,你应该开始寻找更好的代码<代码>$(此).hide
没有做任何有用的事情,也许它会使用JavaScript引擎的死代码删除算法,但它肯定不会在页面上隐藏任何内容。说
$(这个)。隐藏并不比说
42更有效率;当然,它们都是法律声明,但没有任何用处

也许你的意思是:

$(this).hide();
但这与
this.hide()完全不同
除非
已经是jQuery对象。标准DOM对象没有
hide
方法,因此
this.hide()通常是一个错误,而
$(this).hide()隐藏DOM对象并继续下一条语句

最后,我们得到了一些至少有意义的东西:

click
函数只需要一个回调函数,因此您可以给它一个函数名或匿名函数(即函数“literal”)。类似地,你可以说煎饼(11)
var=11;煎饼(11)

因此,可以使用命名函数作为jQuery回调;但是,这两个
元素.click
调用是不等价的。在第一种情况下:

element.click(function() { notify() });
notify
内的
的值将为
窗口
;在第二种情况下:

element.click(notify)
将是
通知
中元素的DOM对象


也许这不是一个很好的答案,但我需要比评论更多的空间来指出你问题中的所有困惑。

只要它具有相同的功能,就可以了。但是,例如,$(“选择器”).action(速度,$(this.action(););取决于eval,这将阻碍此速度。(事实上,eval通常应该避免,尽管在这种情况下,负面影响相当小。)仅仅因为它做同样的事情并不总是意味着它以同样的方式做同样的事情。另外,$(this)只是确保this是jQuery对象。通常是不必要的,但值得三次按键。我的回答是为了澄清您的一些困惑,并投票结束,因为您的问题充满了误解。我投票结束是因为您可以同样轻松地测试这些废话或阅读文档。您是说“element.click(notify);”语句将执行notify()?如果你是这么说的,那就错了(除非点击呼叫通知)。是的,这就是我的意思。你对此持肯定态度吗?我一直认为这是一种默认行为,因为我以前在这方面遇到过问题。@mateusz,只有在包含开括号和闭括号时,如
元素。单击(notify())
它才会执行该函数。没有parens,它只是对函数stop的引用。为什么这甚至是一场讨论?使用jQuery文档,而不是猜测。这个答案也是完全错误的。绑定时不执行该函数。最重要的是,您可以从阅读文档中了解到,第二个示例使用传递给notify的click事件对象。第二个示例还意味着
不会引用正在单击的元素。谢谢!我编辑了我的问题。通过
$(this).hide我的意思是
$(this.hide()
@Web\u Designer:我就是这么想的,所以我和其他人一起解决了这个问题。