3

ブラウザーは同じ名前の複数の関数宣言をどのように処理しますか?

特定のテスト ケースは以下のとおりです。注: サーバー スクリプトが同じ名前で複数の関数宣言を作成することを許可する意味がないことはわかっていますが、興味深いので、回答する前にこれを理解してください。これは純粋に行動研究のためのものです。

当社の CMS は、単一の「ウィジェット」の複数のインスタンスを作成します。

<div class="targetMeWithThis"></div>

そして

function startWidgetFunction() {
var param1 = $server.Variable1
var param2 = $server.Variable2
var param3 = $server.Variable3
}

サーバーがこのウィジェットの複数のインスタンスを含むページをレンダリングするとき、ブラウザーはどの JavaScript 関数が使用されているかをどのように判断しますか? それぞれに個別のオブジェクト(関数)を実際に作成するブラウザはありますか?

ありがとう、j

4

2 に答える 2

3

javascriptでは、(ほとんど)関数を含むすべてがオブジェクトです。そうは言っても、関数定義の上書きは、変数の上書きとまったく同じように機能します。

var myFunc = function () {
    alert('1');   
};

myFunc(); // alerts '1'

var myFunc = function () {
    alert('2');  
};

myFunc(); // alerts '2'

http://jsfiddle.net/KgKgf/3/

すでに宣言されている変数を宣言することは良い習慣ではなく、多くのコード品質ツール(jslint、jshintなど)がそれについて警告することに注意してください。

于 2012-03-14T19:32:45.877 に答える
1

この特定の例では:

function = startWidgetFunction() {
var param1 = $server.Variable1
var param2 = $server.Variable2
var param3 = $server.Variable3
}

functionは予約済みのキーワードであるため、ブラウザーはエラーをスローします。

別の変数名を指定すると、(グローバル) 変数に値を割り当てるだけです。変数は、ウィジェット スクリプトが連続して実行されるたびに、新しい (同一の) 関数で上書きされます。

于 2012-03-14T19:15:13.380 に答える