Javascript-我是否需要使用';var';重新分配函数中定义的变量时';s参数?

Javascript-我是否需要使用';var';重新分配函数中定义的变量时';s参数?,javascript,Javascript,我已经找到了许多关于“var”语句的定义,但大多数都是不完整的(通常来自介绍性指南/教程)。如果变量和范围已在参数列表中声明,是否应使用“var” someFunc = function(someVar) { // Is it considered good practice to use 'var', even if it is redundant? var someVar = cheese; }; 不可以。在Javascript中,您可以随意处理函数参数 考虑以下代码,您可

我已经找到了许多关于“var”语句的定义,但大多数都是不完整的(通常来自介绍性指南/教程)。如果变量和范围已在参数列表中声明,是否应使用“var”

someFunc = function(someVar)
{
   // Is it considered good practice to use 'var', even if it is redundant? 

   var someVar = cheese;
};

不可以。在Javascript中,您可以随意处理函数参数

考虑以下代码,您可以在Web上看到这些代码,它们用于使代码在标准和IE事件模型中工作:

function someEventHandler(event) {
  event= (event) ? event : window.event;
  // statements
}

答案是不,你不应该这样做这实际上被认为是一种不好的做法

分析代码示例时引发以下错误:

第5行的问题字符16:
someVar
已定义


不,输入执行范围时定义名称的顺序如下:

  • 函数参数(值已传递或
    未定义
  • 特殊名称
    参数
    (如果不存在参数值)
  • 函数声明(带正文)
  • 变量声明(如果不存在,则带有
    未定义的
  • 当前函数的名称(如果不存在,则带正文)
  • 这意味着在此代码中,
    foo
    指的是函数参数(很容易更改):

    如果您在
    foo
    中使用函数声明,则该主体将覆盖所有其他主体。另外,请注意,这意味着您可以执行以下操作:

    function foo(arguments) {
        alert(arguments);
    }
    foo(); // undefined
    foo(1); // 1
    
    不要这样做。

    “我找到了许多关于‘var’语句的定义,但大多数都不完整。”


    试试这个(有点闷,但希望完成:-):var关键字声明一个新变量,将其绑定到当前词法范围,并将其提升到所述范围的顶部。换句话说,变量将不存在于声明它的函数之外&将在函数内部执行任何语句之前声明。函数参数隐式绑定到该函数的作用域,因此不需要var关键字。

    谢谢!这正是我需要知道的:PWho认为这是“坏习惯”?请不要说“JSLint有”(因为它还说没有额外分号的好代码是“糟糕的做法”)——只是寻找一些来源来支持这一说法,而不是说我会提出不同的观点;-)Thx,我不确定上面的代码是否正确或符合语言规则/标准
    function foo(arguments) {
        alert(arguments);
    }
    foo(); // undefined
    foo(1); // 1