繁体   English   中英

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

[英]Javascript - Do I need to use 'var' when reassigning a variable defined in the function's parameters?

我发现了'var'语句的许多定义,但大多数都是不完整的(通常来自入门指南/教程)。 如果变量和范围已在参数列表中声明,我应该使用'var'吗?

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

   var someVar = cheese;
};

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

分析代码示例时, JS Lint会抛出以下错误:

第5行第16个问题: someVar已经定义。

“我发现'var'语句有很多定义,但大多数都不完整。”

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

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

  1. 函数参数(值传递或undefined
  2. 特殊名称arguments (如果不存在,则带有arguments值)
  3. 函数声明(随身携带)
  4. 变量声明(如果不存在,则为undefined
  5. 当前功能的名称(带身体,如果不存在)

这意味着在这段代码中, foo引用了函数参数(可以很容易地改变):

function foo(foo) {
  var foo;
  alert(foo);
}
foo(1); // 1

如果您在foo使用函数声明,那么该正文将覆盖所有其他声明。 另请注意,这意味着您可以执行此操作:

function foo(arguments) {
    alert(arguments);
}
foo(); // undefined
foo(1); // 1

不要那样做。

不可以。在Javascript中,您可以随心所欲地使用函数参数。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM