注意:这确实太长了,但我希望有人觉得它有帮助。
对于初学者:($
或者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.使用函数构造函数
// This is similar to 'eval'
// the string you pass will be the body of the function
var fn = new Function("return true");
您还说您对特定上下文中不存在的函数和变量感到困惑。这是因为作用域:在 JavaScript 中,每个函数都会创建一个新作用域。如果您创建一个变量(用 声明var
)或另一个函数(使用上述任何有效的变体),则该变量或函数在声明它的函数之外将不可见。但是它们将在同一范围内定义的其他嵌套函数中可见(嵌套函数“关闭”它们是外部范围,因此通常称为“闭包”)。