【发布时间】:2013-10-02 12:01:48
【问题描述】:
<script>
jQuery(function($) {
$('#container').jstree();
});
</script>
$被传入匿名函数,是什么意思?
【问题讨论】:
标签: jquery
<script>
jQuery(function($) {
$('#container').jstree();
});
</script>
$被传入匿名函数,是什么意思?
【问题讨论】:
标签: jquery
美元符号 ($) 实际上是 jQuery 函数的别名。并且根据文档,如果您将回调作为参数传递给此函数,它将在 DOM 准备好时执行。
【讨论】:
jQuery(function( $ ) {
// Your code using failsafe $ alias here...
});
和
$(function() {
// Document is ready
});
同时使用 $(document).ready() 的快捷方式和参数 使用 $ 别名编写故障安全 jQuery 代码,而不依赖于 全局别名。
【讨论】:
它使“$”成为局部变量,从而优雅地避免了与可能使用“$”符号的任何其他变量的冲突。
这些函数都做同样的事情——当 DOM 准备好时执行一些代码。
"$" 和 "jQuery" 接受函数作为参数被创建为快捷方式,以避免重复这种常见的构造。接受一个接受 $ 作为其第一个参数的函数是进一步的语法糖 - 现在您可以方便地使用闭包,而无需自己动手。
【讨论】:
http://api.jquery.com/jQuery/#jQuery3
jQuery(function( $ ) {
// Your code using failsafe $ alias here...
});
【讨论】:
$ 是jQuery 的别名。
所以你也可以写jQuery('#container').jstree();
【讨论】:
$ 只是 javascript 中的一个有效变量名——比如a 或b——本质上并不是什么神奇的东西。几年前,当我第一次学习时,这对我来说并不明显。
该代码看起来像是对 JavaScript 中 Module Pattern 的尝试。好处是匿名函数有一个闭包,有助于维护其中变量的私密性并维护其局部变量和函数的状态。
实现模式的正确方法是:
(function($) {
...
})(jQuery);
(...)() 是 IIFE 的一个示例(立即调用 Function Expression)。函数表达式由结尾的() 调用,如果它包含jQuery,则会将jQuery 函数作为$ 传递到匿名函数的作用域中,因为这就是它作为参数名称的内容。这种模式的一个好处是人们可以编写 jQuery 插件,并且可以维护自己的 jQuery 函数和变量的副本,并可以随意调用它们,这有助于解决名称冲突。
当前接受的答案是错误地解释了文档,它只是说明如果你有一个函数声明,你可以通过将它传递给 jQuery 函数来在文档准备好时将其作为回调执行,这相当于 jQuery 的$(document).ready(function(){...});
【讨论】:
jQuery() — which can also be written as $() — searches through the DOM ...
因此:
$( "div.foo" ); 等于 jQuery( "div.foo" );
【讨论】:
简而言之: $ 指的是由 JQuery 设置的一个全局变量来表示自己。
没那么短: Javascript 变量命名约定允许您以“$”、“_”或“大写字母 (Lu)”、“小写字母 (Ll)”、“标题字母 (Lt)”等类别中的任何有效 Unicode 字符开头变量, “修饰字母 (Lm)”、“其他字母 (Lo)”或“字母编号 (Nl)”。
因此,您可以拥有自己的变量 $ 或 _。许多 javascript 框架/库/事物利用这一事实来缩短它们的调用时间。
【讨论】:
所以在 JQuery(Javascript 库)中,美元符号是对 JQuery 函数的别名/引用。
在这种情况下,第一行相当于 $(document).ready(),它等待 DOM 完成加载后再运行。
换句话说,你想在 DOM 完成加载后运行的函数(实际上几乎所有函数)你想把它放在里面,就像 jstree() 一样。
【讨论】: