是否需要声明一个函数变量(在Javascript中)?

时间:2014-02-07 10:46:36

标签: javascript function declaration

我学校的老师正在教我们,我们必须专门声明功能变量,如下所示:

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

谢谢!

4 个答案:

答案 0 :(得分:3)

在javascript中,变量的范围取决于它们的声明方式:

  • 如果在定义变量时声明变量,变量的范围为全局
  • 如果您使用var关键字进行声明,则变量的范围为
  • 如果您使用较新的ES6 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);
}