2

変数を作成し、関数でその値を設定しようとしました。しかし、この値はその関数の外ではアクセスできません

<script type="text/javascript">
 $(document).ready(function () {
   var pId;
   getProfiles(id,function(b)
     {
        pId=b;
        alert(pId); // It works fine...
      });
  alert(pId); // undefined...
  });
</script>
4

3 に答える 3

3

最初のアラートは、渡したコールバック関数によって値が設定された直後であるため、機能しますgetProfiles

getProfilesに渡すコールバック関数がまだ実行されていないため、コード例の2番目のアラートにはまだ値「undefined」が表示されます。

また、補足pIdとして、jQueryのreadyイベントに渡す関数に対してローカルであり、グローバル変数ではありません。

于 2012-04-24T07:24:21.293 に答える
2

宣言しpIdますが、値を割り当てないため、デフォルトではundefined、、同じスコープ内のアラートが評価され、' undefined'が出力されます。匿名関数は(おそらく非同期で)呼び出されるコールバックでありgetProfiles()、外部関数が呼び出される前に呼び出されると想定することはできませんalert

<script type="text/javascript">
 $(document).ready(function () {
   /* You declare it but you don't assign any value to it... 
    * so by default is undefined 
    */
   var pId; 
   getProfiles(id,function(b)
     {
        pId=b;
        alert(pId); // This is called only once your anonymous callback is called...
      });
  alert(pId); // Alerts 'undefined'
  });
</script>
于 2012-04-24T07:32:43.143 に答える
1

pIdグローバルスコープで宣言された宣言変数pIdなしで新しい値に割り当てる場合。しかし、ローカルpId変数があります。したがって、コールバック内でアラートを呼び出すと、グローバルの値が表示さpIdれ、2番目のアラートはローカルのpId値が表示されます。

function f() { d = 2; }; 
function a() {
    var d = 1;
    f();
    alert(d);
}
a();
alert(d);

最初のアラートは1を表示し、2番目は2を表示します。したがって、コード内の2番目のアラートはundefined、コールバックがいつ呼び出されたかに関係なく常に表示されます。

于 2012-04-24T07:24:50.700 に答える