相当一个javascript 101问题,但是,这里是:
function test(a){
var a='test';
}
" var"要求变量不要走向全球?
function test(a){
a='test';
}
这样就够了吗?
如果用undefined调用函数怎么样?
function test(a){
a='test';
}
test();
在上面的代码片段中,会变成全局吗?
答案 0 :(得分:3)
每个参数都隐式为var
。
(提供的参数值并不重要。)
答案 1 :(得分:1)
如果您没有使用"use strict"
,那么如果您不使用var
,a
将隐式附加到全局命名空间,在浏览器中等效于{{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