0

現在、ny 変数はグローバルであるため、定義されているように表示されますが、テスト関数を呼び出すときに、ny 引数が設定されているかどうかだけを確認したくありません。typeof(ny) でグローバル ny 変数を考慮したくありません。

ny = 1;
var test = function(ny){
    console.log(typeof ny ==='undefined');
}
test();
4

3 に答える 3

4

typeof(ny) でグローバル ny 変数を考慮したくありません。

それはしません。ny引数識別子として使用することによりny、外側のスコープで をシャドーイングします。あなたの例はログに記録されますtrue。私が知る限り、それがあなたの望みです。

補足:typeofは演算子であり、関数ではありません。括弧は必要ありません:

console.log(typeof ny === "undefined");
于 2013-07-24T08:47:32.480 に答える
2

引数が関数に渡されたかどうかを確認したい場合はargumentsオブジェクトの長さを確認してください。

次の関数を検討してください。

var test = function (ny) {
    console.log(arguments.length > 0);
};

test()ログしますfalse

test(ny)ログしますtrue

于 2013-07-24T08:47:56.133 に答える
0

私が知っている唯一の方法:

  1. グローバル変数を作成しないでください。
  2. スコープが異なる変数に同じ変数名を使用しないでください。

JavaScript はスコープを段階的にチェックし、外側に拡張します。その名前のグローバル変数がある場合、JavaScript は最終的にそれを見つけて使用します。スコープに関係なく、JavaScript に変数を無視させることはできません。

于 2013-07-24T08:47:58.697 に答える