函数(a){var a =' test&#39 ;; }:是" var"需要?如果a未定义怎么办?

时间:2014-04-15 09:51:28

标签: javascript variables

相当一个javascript 101问题,但是,这里是:

function test(a){
    var a='test';
}

" var"要求变量不要走向全球?

function test(a){
    a='test';
}

这样就够了吗?

如果用undefined调用函数怎么样?

function test(a){
    a='test';
}
test();

在上面的代码片段中,会变成全局吗?

4 个答案:

答案 0 :(得分:3)

每个参数都隐式为var

(提供的参数值并不重要。)

答案 1 :(得分:1)

如果您没有使用"use strict",那么如果您不使用vara将隐式附加到全局命名空间,在浏览器中等效于{{1} }}。这被称为“污染全局命名空间”,通常被认为是不好的做法。

这与绑定到名称的形式参数不同,如示例中所示。它的功能范围为'a'

但是,如果使用window.a,则"use strict"的缺失会在支持var的环境中针对未在函数签名中正式绑定的任何变量引发错误。它基本上可以防止不良做法以及代码中容易出错的错误/错误

修改

我实际上认为它也值得一提"use strict",这是一种显式绑定变量以便在给定范围内使用的方法。因此,如果您使用let

,则无需使用let

首先在您的环境中检查对此关键字的支持!

答案 2 :(得分:1)

您可以将参数传递给函数。这些被认为是函数范围内的局部变量,无论是否使用这些参数调用函数。

如果在没有为所有参数提供值的情况下调用函数,则在调用函数时未传递的参数将设置为值undefined,但它们仍在函数范围内声明为locals

function test(a){
    var a = 'test';
}
  

是否需要“var”来防止变量走向全局?

不需要var关键字,实际上不应该使用,因为您要重新声明a变量,并且不允许重新声明变量。

function test(a){
    a = 'test';
}
  

这样就够了吗?

是的,那很好,就是应该这样做的方式。您已经有一个名为a的变量,现在您将其设置为不同的值。

  

如果用undefined调用函数怎么样?

function test(a){
    a = 'test';
}
test();

如上所述,无关紧要,参数a仍被声明为函数内的局部变量,该值仅设置为undefined,因此var不应该使用关键字,因为您没有创建新变量,a已经存在,您只是给它一个新值。

答案 3 :(得分:0)

嗯,有一些观点可以评论:

首先,如果一个函数变量不是对外部var的引用,那么它必须具有var

var outside_var = "OUT!";
var myFunction = function() {
    var inner_var = "IN";
    console.log(outside_var); //Will prompt "OUT!"
    console.log(inner_var);   //Will prompt "IN"
}
console.log(outside_var); //Will prompt "OUT!"
console.log(inner_var);   //Will prompt undefined

另一点是每个定义为参数的var已经在函数范围内定义,你不需要用var声明它:

var outside_var = "OUT!";
var myFunction = function(a) {   //imagine you call myFunction("I'M");
    var inner_var = a + " IN";
    console.log(outside_var); //Will prompt "OUT!"
    console.log(a);           //Will prompt "I'M"
    console.log(inner_var);   //Will prompt "I'M IN"
}
console.log(outside_var); //Will prompt "OUT!"
console.log(a);           //Will prompt undefined
console.log(inner_var);   //Will prompt undefined