我学校的老师正在教我们,我们必须专门声明功能变量,如下所示:
function something(var1, var2)
{
var var1, var2;
console.log(var1);
console.log(var2);
}
something("Totally", "Cool");
但是我似乎无法找到任何关于此的话题,所以我的问题是,这甚至是必需的吗?是不是完全正常而且可以离开var var1, var2;
?
如果是这样,这是在W3C JavaScript文档中的某处说明的吗?
我的意思是它无论哪种方式都有效,但是如果它没有...清洁代码我会说:P
我正在谈论的代码:http://pastebin.com/y5B2aznc
谢谢!
答案 0 :(得分:3)
在javascript中,变量的范围取决于它们的声明方式:
var
关键字进行声明,则变量的范围为 let
关键字,则变量的范围是在当前区块内 因此最好不要使用全局变量并始终限制变量的范围。
以下是一些解释javascript中变量范围的参考资料:
你也应该读道格拉斯克罗克福德的Javascript,好的部分:
编辑:
在您的特定情况下,它没用:
function something(var1, var2)
{
var var1, var2;
console.log(var1);
console.log(var2);
}
当您将这些变量作为函数的参数提供时,它们已经在函数范围内声明,因此再次将它们声明为var
是多余的,您可以安全地删除该行。
function something(var1, var2)
{
console.log(var1);
console.log(var2);
}
答案 1 :(得分:1)
如果您不使用var
语句,则将在global scope
window
对象中创建变量。这是一种不好的做法,因为您正在污染全局范围并且可能影响其他脚本/函数。
我建议您阅读MDN上的var statement。另外,here是一篇关于Javascript范围的好文章。
编辑:我没注意到你声明的变量也是函数参数。在这种情况下,var语句将无效,因为重新声明已声明的变量是no-op
(什么都不做)。
如果您想了解有关var
语句以及如何在Javascript中处理scope
的更多信息,我建议您阅读this文章吗?
答案 2 :(得分:1)
在声明中省略关键字var将导致变量是全局的,而不是将其范围限制在函数中。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var
答案 3 :(得分:1)
在您的特定情况下,作为参数传递的所有变量都是 local 变量,就像您使用var
声明的变量一样。因此,使用var
重新声明它们是多余的。
但更好的做法是将参数保留原始值,然后将结果存储在其他局部变量中。 E.g:
function something(var1, var2)
{
var varAlt1 = var1.toUpperCase(), varAlt2 = var2.toLowerCase();
console.log(varAlt1);
console.log(varAlt2);
}