在jQuery中声明函数的方法

时间:2013-05-24 20:36:46

标签: jquery

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

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

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

    function () {
        // Your code
    }

7 个答案:

答案 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(){
})

请参阅http://api.jquery.com/ready/

答案 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
}