3

よろしくお願いします。私は教科書を使って作業していますが、ある関数を使用して別の関数を呼び出し、ウィンドウを開きます:

function rtest(){
   content='dans window';
   oneWindow=open("","Window 1","width=450,height=290");
   newWindow(oneWindow);
}
function newWindow(x){
   x.document.close();
   x.document.open();
   x.document.write(content);
   x.document.close();
   x.moveTo(20,20);
   x.focus();
}

したがって、すべて正常に動作しますが、私の質問は次のとおりです: newWindow() 関数は、rtest() 関数の「contents」変数の内容にどのようにアクセスできますか? そして、なぜ、「content」変数の前に「var」を付けると、次のようになります。

function rtest(){
  **var content='dans window';**
  oneWindow=open("","OneWindow","width=450,height=290");
  newWindow(oneWindow);
}

...エラーがスローされますか (新しいウィンドウの内容は空白になりますか)?

var を使用する場合と使用しない場合の違いを説明できる人はいますか?

ありがとうございました!

ダニエル

4

5 に答える 5

6

rtest 内で var を使用しない場合、自動的にグローバル変数になります。これが、newWindow を含む他の JavaScript コードからアクセスできる理由です。これで、var を使用すると、自動的に rtest スコープ内の変数になるため、現在使用できるのは同じスコープ内のものです。

于 2009-12-24T01:51:34.993 に答える
5

元の関数内で変数を使用して宣言するvarと、ローカル変数になり、関数の外では見えなくなります。

変数をまったく宣言しない場合は、グローバルになります。ただし、ベスト プラクティスは、グローバル変数を宣言することです。あなたの教科書がこれをしない場合は、それを置き換えることを検討してください。教授がこれを行わない場合は、彼を置き換える (または改革する) ことを検討してください。:-) 彼を説得するのが難しい場合は、私がここでトップ 200 のユーザーの 1 人であることを述べてください (必ずしもそうすべきではありません)。

例えば:

var content;

function rtest(){
    content='dans window';
    oneWindow=open("","Window 1","width=450,height=290");
    newWindow(oneWindow);
}

また、空白のウィンドウを開く最善の方法はopen("about:blank", ...)、 ではなくを呼び出すことopen("", ...)です。

于 2009-12-24T01:54:32.353 に答える
2

関数スコープについてです。変数を で宣言するとvar、実行した関数のスコープでのみ使用できます。

このステートメントを使用せずvar、宣言されていない識別子への代入 (宣言されていない代入) を行うと、変数は Global オブジェクトのプロパティとして追加されます。

于 2009-12-24T01:56:52.457 に答える
2

を使用しない場合は、グローバル変数varを作成しています。つまり、プログラム内の任意のコードからアクセスできる変数です。を使用すると、ローカル変数が作成されます。これは、定義されているスコープ(通常は、定義されている関数)内からのみアクセスできる変数です。var

グローバル変数は最初は便利かもしれませんが、一般的に使用するのはお勧めできません。問題は、すべてのコードがその 1 つのグローバル変数を共有することです。将来、何らかの理由でその変数の 2 つ以上の異なるバージョンが必要になった場合、2 つの用途を分離することはできなくなります。グローバル変数は、プログラム内のどこからでもアクセスまたは変更できるため、何が変更されているか、またはそれに依存しているのかを把握するのは難しい場合がありますが、ローカル変数は、コード内の限定された明確に定義されたセクション内でのみアクセスできます。簡単に検査できます。

于 2009-12-24T01:58:43.937 に答える
1

var を使用すると、関数内でローカル変数を宣言しますが、これはこの関数の外では見えません。var がないと、実際に window オブジェクトで作業し、そのフィールドを設定または上書きします。クライアント側 Javascript のグローバル スコープは、常にウィンドウ オブジェクトです。したがって、window.content='dans window'; と書くこともできます。そこで実際に何をしているのかを明確にするためですが、それ以外は同じです。ところで、window 変数自体は、再帰的にウィンドウを参照する window オブジェクトの単なるフィールドです。

于 2009-12-24T01:57:52.643 に答える