4

jQuery で関数を宣言する方法の違いがわかりません。また、関数を呼び出すのに時間がかかり、コンテキストに存在しないために正しく動作しないことがありました。これがjQueryで関数を宣言する別の方法なのか、それとも他の方法があるのか​​さえわかりません。ここで誰か説明してくれませんか?私は完全に初心者です。

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

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

    function () {
        // Your code
    }
4

7 に答える 7

8
$(function() { })

...とまったく同じです...

$(document).ready(function() {
});

これにより、DOM の準備が整った瞬間に関数が起動されます (DOMReady イベント)。

jQuery(function($) {
});

同じことです。ほとんどのセットアップでは、$:= jQuery(唯一の例外は NoConflict 環境の場合です)。jQuery に渡すクロージャーの最初のパラメーターは、jQueryオブジェクトを返します。したがって、この関数は、他の関数が行ったことを正確に実行するだけでなく、単に再マップ$します。jQuery

3 番目のステートメントは単純な関数宣言であり、jQuery とは関係ありません。

于 2013-05-24T20:40:51.277 に答える
7

注意: これは確かに長すぎますが、誰かの役に立てば幸いです。

手始めに:($またはjQuery、通常は同じものです)は関数です。最初の 2 つの例では、その関数を呼び出して、無名関数への参照を渡しています。これは、渡された関数を「document.ready」イベント リスナーとして追加するための jQuery ショートカットです (実際のイベント名はDOMContentLoaded、対応ブラウザーにあります)。

JavaScript には、関数を作成する 3 つの方法があります。

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
}

前の 2 つの例は、通常、関数をすぐに呼び出すために使用されます。

!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) または別の関数 (上記の有効なバリエーションのいずれかを使用) を作成する場合、その変数または関数は、宣言された関数の外では表示されません。ただし、それらは同じスコープで定義された他のネストされた関数内で表示されます (ネストされた関数は「クローズオーバー」し、外側のスコープであるため、一般に「クロージャー」と呼ばれます)。

于 2013-05-24T20:45:07.927 に答える
3

JavaScript の文字は変数名にできることに注意してください。したがって、jQuery のソースには、次の定義に似たものがあります。

var $ = jQuery = windw.jQuery;

これらはすべて同じ変数です。$()jQuery()は同じものなので、私はそれを指摘します。


これは実際には jQuery.ready() のショートカットであり、渡された引数は jQuery に従ってドキュメントがロードされたときのコールバックです。引数として配置function(){}すると、匿名関数が作成され、コールバックが呼び出されたときに実行されます。

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

これには名前が必要なため、実際には有効なコードではありません。「SyntaxError: Unexpected token (」という例外がスローされます。

function () {
    // Your code
}
于 2013-05-24T20:43:12.090 に答える
2

3 つ目は関数宣言で、名前がないため関数としては何の役にも立たず、呼び出されませんが、最初の 2 つの宣言は同等です ($ は jQuery のエイリアスです)。準備ができています。それはまた同等です

$(document).ready(function(){
})

http://api.jquery.com/ready/を参照してください

于 2013-05-24T20:38:15.070 に答える
2

function を呼び出す最初の 2 つの方法は、関数へのショートカット$(document).ready()です。つまり、その中でテーマを呼び出すと、その$ようjQueryに実行されます。http://api.jquery.com/ready/を参照してください。3 つ目は、通常の関数呼び出しを指します。$またはを使用する場合の違いjQueryは、他のライブラリとの競合に関するものです。

于 2013-05-24T20:38:57.250 に答える
1

JavaScript では、関数を他の関数に渡すことができます。のようなものを見ると

$('div').click(function() {
    alert("clicked");
});

匿名関数を引数としてclick()メソッドに渡します。メソッドは、指定した関数を単に実行します。

そのため、同じ結果を得ることができます

function runOnClick() { alert("clicked"); }

$('div').click(runOnClick);
于 2013-05-24T22:43:54.797 に答える
0

jQuery はプログラミング言語ではありません。JavaScript for JavaScript で書かれたライブラリです。JavaScript で関数を宣言する規則だけに従う必要があります。jQuery は、関数を定義する新しい方法を提供しません。

これらは有効な関数定義ではありません:

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

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

これは有効な関数定義です:

function myFavoriteFunction() {
    // Your code
}
于 2013-05-24T20:39:03.730 に答える