我不明白在jQuery上声明函数的方法之间的区别,有时我失去了一些时间试图调用一个函数而它无法正常工作,因为它在上下文中不存在.我甚至不知道这是否是在jQuery上声明函数的不同方式,或者是否有其他方法.有人可以在这解释一下吗?我完全是菜鸟.
$(function () {
// Your code
})
jQuery(function($) {
// Your code
});
function () {
// Your code
}
Run Code Online (Sandbox Code Playgroud)
$(function() { })
Run Code Online (Sandbox Code Playgroud)
......完全等同于......
$(document).ready(function() {
});
Run Code Online (Sandbox Code Playgroud)
这将在DOM准备就绪时触发函数(DOMReady事件).
jQuery(function($) {
});
Run Code Online (Sandbox Code Playgroud)
是一回事.在大多数设置中,$:= jQuery(仅在NoConflict环境的情况下例外).您传递给jQuery的闭包的第一个参数将返回该jQuery对象.因此,除了执行其他功能之外,此功能只需重新映射$到该功能jQuery.
第三个语句是一个简单的函数声明,它与jQuery无关.
注意:这确实太长了,但我希望有人觉得它有用.
首先:( $或者jQuery,它们通常是同一个东西)是一个功能.在前两个示例中,您将调用该函数,并将其传递给匿名函数.这是一个jQuery快捷方式,可以将传递的函数添加为"document.ready"事件侦听器(实际的事件名称DOMContentLoaded在兼容的浏览器中).
JavaScript有三种创建函数的方法:
1.功能声明
function foo() {
// code
}
Run Code Online (Sandbox Code Playgroud)
在声明中,必须始终命名该函数.在这种情况下,函数名称为"foo".
2.函数表达式
可以命名与否.通常,他们是匿名的.它们将被视为无效语法,具体取决于它们在代码中出现的位置.例如,这是语法错误:
// syntax error
function() {
// code
}
Run Code Online (Sandbox Code Playgroud)
但这不是:
// passing a function expression is fine
foo(function() {
// code
});
Run Code Online (Sandbox Code Playgroud)
这也是有效的:
// parentheses make it an expression too
(function() {
// code
});
Run Code Online (Sandbox Code Playgroud)
这个也是:
// the negation operator also makes it be interpreted as an
// expression, instead of a syntax error
!function() {
// code
}
Run Code Online (Sandbox Code Playgroud)
前两个示例通常用于立即调用函数:
!function() {
alert('invoked')
}();
(function() {
alert('invoked')
}());
Run Code Online (Sandbox Code Playgroud)
隔离,没有调用括号,它们几乎没用,因为如果我们不将它分配给任何东西,对新创建的函数的引用会立即丢失.
另一方面,这非常有用:
// function expressions are fine on the right-hand-side of an assignment
var fn = function() {
// code
}
Run Code Online (Sandbox Code Playgroud)
3.使用Function构造函数
// This is similar to 'eval'
// the string you pass will be the body of the function
var fn = new Function("return true");
Run Code Online (Sandbox Code Playgroud)
您还说您对某些上下文中不存在的函数和变量感到困惑.这是因为范围:在JavaScript中,每个函数都会创建一个新范围.如果您创建一个变量(声明为var)或另一个函数(使用上面的任何有效变体),那么该变量或函数将在声明它的函数之外不可见.但是它们将在同一范围内定义的其他嵌套函数中可见(嵌套函数"接近"它们是外部作用域,因此通常称为"闭包").
| 归档时间: |
|
| 查看次数: |
11815 次 |
| 最近记录: |