0

JavaScript 関数があり、2 番目のパラメーターがundefinedかどうかを確認したい場合、次のような値を割り当てたいとします。

function myFunc(a,b){ 
   if(typeof b==="undefined" ){
      b=0;
   }
   //do stuff
}

ifブロックの変数bはまだ関数のパラメーターを参照していますか、それともbという名前のグローバル変数が作成されていますか?

乾杯

4

7 に答える 7

3

はい、それぞれ (ES5) (ES3)bで解決されます。純粋な名前にアクセスすることにより、グローバル変数が存在する場合でも、常にローカルで解決されます。lexicalEnvironmentActivation Objectb

同じ名前のグローバル変数にアクセスするには、明示的にwindow.bそれぞれ(ノード) を呼び出す必要があります。global.b

于 2012-09-18T08:38:28.320 に答える
2

@Andre と @Nelson による回答はどちらも正しいですが、わかりやすくするために:

var c = 123;
var func = (function(a)//a === 1234
{
    var b = c;//local b === global c
    return function(a,c)
    {
        console.log(c === b);//false, unless second argument was 123
        console.log(a === 1234);//false, unless first arg was 1234
        console.log('a masks the a of the outer scope');
    };
})(1234);

JS は最初に呼び出された関数のスコープをスキャンし、使用されている変数がない場合は、外側のスコープに移動します。これは、別の関数にすることも、最終的にはグローバル スコープにすることもできます。aこの例では、内側の (返された) 関数は、外側の関数で定義されているの値にアクセスできません。どこにも参照されていないため、外部関数が返されたときに GC されます。

于 2012-09-18T08:48:22.320 に答える
2

関数のパラメータを参照します。次のように自分自身をテストできます。

var b = 45;
function myFunc(a,b){ 
   if(typeof b==="undefined" ){
      b=0;
   }
   alert( b ); //It will output 0
   //do stuff
}

myFunc('');
于 2012-09-18T08:38:37.140 に答える
1

コード:

function myFunc(a,b){
   if(typeof b==="undefined" ){
      b=0;
   }
    console.log('b from myFunc:'+b)
}
myFunc(5);
console.log('global:'+b)

出力:

b from myFunc:0

b is not defined
于 2012-09-18T08:41:21.663 に答える
1

Javascript は、最初にローカル スコープでローカル変数または名前付き関数引数を探します。そこにシンボルが見つかった場合、その変数が使用されます。

一致するローカル シンボルが見つからない場合にのみ、グローバル シンボルが使用されます。

したがって、あなたの例ではb、関数の引数の値を設定します。

ローカル変数または名前付き関数の引数でローカル シンボルを定義すると、その名前だけを使用して同じ名前のグローバル変数にアクセスすることはできなくなります。window.グローバル変数を具体的にアドレス指定する場合は、 as in をプレフィックスとして付けることで実行できますwindow.b。これは特にグローバル スコープを対象としているため、ローカル スコープは使用されません。

于 2012-09-18T08:43:30.717 に答える
1

次の場合、変数は関数にとどまります。

  1. 変数は、それを使用してvar、または使用せずに関数内で宣言されます
  2. 変数は、this親ノードとして関数で宣言されます。以下の例

    function foo(){ this.bar = 'hello'; }

変数がグローバル スコープで使用可能になるのは、次の場合です。

  1. 変数は、それを使用してvar、または使用せずに関数の外側で宣言されています

  2. 変数は、親ノードとして宣言されます。以下のwindow例です

window.bar ='i am global'

于 2012-09-18T08:44:10.180 に答える
-1

グローバルに変数を定義する必要があります:

以下のコードでは、t2 は定義されていません。

    <script>

var t1="";
var t2;
function check(t1,t2){
if (t1===undefined)
{
alert("t1 is undefined");
}
if (t2===undefined)
{
alert("t2 is undefined");
}
}
</script>

参照: http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_undefined

于 2012-09-18T08:47:07.547 に答える