1

簡単な質問です。

複数の JavaScript を含む Web プロジェクトがあります。

JS:

// (1) Event

$('.input').keyup(function()
{
    keyUpFunction();    
});


// (2) Function

function keyUpFunction(){ ... }

(1),(2) 1 つの JavaScript ファイルで最初に来るのはどれですか? ブラウザが最初に関数を読み取る場合、関数をメモリに保存し、イベントをスキャンするときに呼び出しますか。

multi javascript で同じ関数が定義されている場合があります。例えば

prm.add_endRequest(function() {
    fn1();
    fn2();
});

$(document).ready(.......)

関数名を複製し、各 js ファイルで各コンポーネントを定義する必要があります。または、関数を1つのファイルで宣言したままにして、関数を複合したサブ関数を呼び出しますか?

4

2 に答える 2

2

関数は次のように定義されます。

function fooBar(){}

現在のスコープの一番上に「巻き上げ」られます。これは、ファイルの最後に定義されていても、現在のスコープで常に使用できることを意味します。

次のように関数を定義した場合、これは当てはまりません。

 var fooBar = function(){};

これらの関数は巻き上げられないため、使用する前に定義する必要があります。

keyUpFunction特定の例では、 keyup イベントが発生した場合にのみ呼び出されることに注意してください。これは、ページ上のすべての JavaScript が既に評価されていることも意味するため、keyUpFunction はすでに定義 (解析) されています。

編集:より明確にするために、この最初の例は問題ありません:

doSomething('hello world');
function doSomething(str){ 
   console.log(str);
} 

ただし、これにより問題が発生します。

doSomething('hello world');
var doSomething = function(str){ 
   console.log(str);
} 
于 2012-04-20T16:49:37.403 に答える
1

@Mattの答えは、関数をうまく巻き上げることをカバーしています。

複数のファイル内で関数名が衝突するのを避けるには、コンテンツをすぐに呼び出される関数式で囲みます。次に例を示します。

(function() {
     // put your variables functions here
     ...

     // register event handlers
})();

その中で宣言された変数または関数は、そのスコープに制約されます。

于 2012-04-20T16:53:34.257 に答える