1

私はいくつかのJs関数が言うようfn1()にしていfn2()ます。 fn1()ページが読み込まれると自動的に呼び出されます

<script >

window.onload=fn1();

 function fn1()
 {
  var list_temp=new Array();
  list_temp.push("testing");
  //etc
 }

 function fn2()
 {
   // Do something after getting the data from fn1()
 }
 </script>`

fn1()ここで、から定義されたリストにアクセスする必要がありますfn2()。とにかくできることはありますか?Javascriptの関数がオブジェクトと同等の方法であるということをどこかで読んだことを覚えていますか?

4

5 に答える 5

3

宣言するだけ

var list_temp=new Array();

function fn1 ()

と同じレベルで

window.onload

トップレベルのスクリプトで宣言された変数はグローバルです... JSでは、変数スコープは関数です...

于 2012-06-06T21:23:04.080 に答える
3

グローバル スコープで変数を定義することもできますが、2 つの関数をクロージャーでラップして、変数をそのクロージャーに対してプライベート (ローカル) にすることもできます。

(function() {
   var list_temp = [];
   window.onload = fn1;

   function fn1()
   {
       list_temp.push("testing");
       // etc...
   }

   function fn2()
   {
       console && console.log(list_temp);
       // Do something after getting the data from fn1()...
   }
})();
于 2012-06-06T21:23:54.823 に答える
1

関数をチェーン化できます。

function fn1()
{
 var list_temp=new Array();
 list_temp.push("testing");
 //etc
 fn2(list_temp);
}

function fn2(data)
{
  // Do something after getting the data from fn1()
}
于 2012-06-06T21:26:50.797 に答える
0

javascriptの関数がオブジェクトと同等の方法であるということをどこかで読んだことを覚えていますか?

はい、すべての関数はオブジェクトであり、共通の関数プロトタイプから継承しています。また、すべてのオブジェクトと同様に独自のプロパティを設定できますが、ここでは役に立ちません。

次に、fn2()からfn1()で定義されたリストにアクセスする必要があります。

できません。の変数宣言はlist_temp関数のスコープであり、外部からは使用できません。だからあなたはどちらか

  • fn2に表示されるスコープ内の変数宣言を移動します
  • リストオブジェクトを、fn2に表示される他の変数にエクスポートします。たとえば、最も簡単な方法はreturnステートメントを使用することです。
于 2012-06-06T21:27:55.253 に答える