在jQuery中声明函数的方法

Ude*_*ira 4 jquery

我不明白在jQuery上声明函数的方法之间的区别,有时我失去了一些时间试图调用一个函数而它无法正常工作,因为它在上下文中不存在.我甚至不知道这是否是在jQuery上声明函数的不同方式,或者是否有其他方法.有人可以在这解释一下吗?我完全是菜鸟.

    $(function () {
        // Your code
    })

    jQuery(function($) {
        // Your code
    });

    function () {
        // Your code
    }
Run Code Online (Sandbox Code Playgroud)

Séb*_*uld 8

$(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无关.


bfa*_*tto 7

注意:这确实太长了,但我希望有人觉得它有用.

首先:( $或者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)或另一个函数(使用上面的任何有效变体),那么该变量或函数将在声明它的函数之外不可见.但是它们将在同一范围内定义的其他嵌套函数中可见(嵌套函数"接近"它们是外部作用域,因此通常称为"闭包").