我不明白在jQuery上声明函数的方法之间的区别,有时我失去了一些时间来尝试调用一个函数,但由于它在上下文中不存在而无法正常工作。我甚至不知道这是否是在jQuery上声明函数的不同方式,或者是否有其他方法。有人可以在这解释一下吗?我完全是诺布。
$(function () {
// Your code
})
jQuery(function($) {
// Your code
});
function () {
// Your code
}
答案 0 :(得分:8)
$(function() { })
......完全等同于......
$(document).ready(function() {
});
这将在DOM准备好的时候激活函数(DOMReady事件)。
jQuery(function($) {
});
是一回事。在大多数设置中,$
:= jQuery
(仅在NoConflict环境的情况下例外)。您传递给jQuery的闭包的第一个参数将返回jQuery
对象。因此,此功能只需将$
重新映射到jQuery
,另外还要完全执行其他操作。
第三个语句是一个简单的函数声明,它与jQuery无关。
答案 1 :(得分:7)
通知:这确实太长了,但我希望有人觉得它有用。
对于初学者:$
(或jQuery
,它们通常是同一个东西)是一个函数。在前两个示例中,您将调用该函数,并将其传递给匿名函数。这是一个jQuery快捷方式,用于将传递的函数添加为“document.ready”事件侦听器(在兼容的浏览器中实际事件名称为DOMContentLoaded
)。
JavaScript有三种创建函数的方法:
<强> 1。功能声明
function foo() {
// code
}
在声明中,必须始终命名该函数。在这种情况下,函数名称为“foo”。
<强> 2。功能表达
可以命名与否。通常,他们是匿名的。它们将被视为无效语法,具体取决于它们在代码中出现的位置。例如,这是语法错误:
// syntax error
function() {
// code
}
但这不是:
// passing a function expression is fine
foo(function() {
// code
});
这也是有效的:
// parentheses make it an expression too
(function() {
// code
});
这也是:
// the negation operator also makes it be interpreted as an
// expression, instead of a syntax error
!function() {
// code
}
前两个示例通常用于立即调用函数:
!function() {
alert('invoked')
}();
(function() {
alert('invoked')
}());
隔离,没有调用括号,它们几乎没用,因为如果我们不将它分配给任何东西,对新创建的函数的引用会立即丢失。
另一方面,这非常有用:
// function expressions are fine on the right-hand-side of an assignment
var fn = function() {
// code
}
第3。使用Function构造函数
// This is similar to 'eval'
// the string you pass will be the body of the function
var fn = new Function("return true");
您还说您对某些上下文中不存在的函数和变量感到困惑。这是因为范围:JavaScript中的,每个函数都会创建一个新的范围。如果您创建一个变量(使用var
声明)或另一个函数(使用上面的任何有效变体),那么该变量或函数将在声明它的函数之外不可见。但它们将在同一范围内定义的其他嵌套函数中可见(嵌套函数“关闭”它们是外部作用域,因此通常称为“闭包”)。
答案 2 :(得分:3)
请记住,javascript中的字符可以是变量名称。所以在jQuery的源代码中有类似于这个定义的东西:
var $ = jQuery = windw.jQuery;
所有这些都是相同的变量。我指出这一点,因为$()
和jQuery()
都是一样的。
这实际上是jQuery.ready()的一个快捷方式,其中传递的参数是根据jQuery加载文档时的回调。当您将function(){}
作为参数时,您正在创建一个匿名函数,这就是在调用回调时执行的函数。
$(function () {//passing anonymous function
// Your code
})
这实际上不是有效代码,因为它必须具有名称。它将抛出异常“SyntaxError:Unexpected token(”。
function () {
// Your code
}
答案 3 :(得分:2)
第三个是一个函数声明,它没有作为没有名称的函数,也没有被调用,而前两个是等价的($是jQuery的别名)请求jQuery调用函数的方法当DOM准备好时。它也等同于
$(document).ready(function(){
})
答案 4 :(得分:2)
调用函数的前两种方法是$(document).ready()
函数的快捷方式。这意味着如果你在$
或jQuery
内调用主题,他们就会像那样执行。
请参阅http://api.jquery.com/ready/!
第三个是指正常的函数调用。
使用$
或jQuery
的差异beetwen与其他库存在冲突。
答案 5 :(得分:1)
在JavaScript中,您可以将函数传递给其他函数。当你看到像
这样的东西$('div').click(function() {
alert("clicked");
});
你将一个匿名函数作为参数传递给click()
方法,该方法只执行你给它的函数。
因此,您可以使用
获得相同的结果function runOnClick() { alert("clicked"); }
$('div').click(runOnClick);
答案 6 :(得分:0)
jQuery不是一种编程语言。这是一个用JavaScript编写的Javascript库。在JavaScript中声明函数的规则是您需要遵循的唯一规则。 jQuery没有提供任何定义函数的新方法。
这些不是有效的函数定义:
$(function () {
// Your code
})
jQuery(function($) {
// Your code
});
这是一个有效的函数定义:
function myFavoriteFunction() {
// Your code
}