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 回答