Javascript 声明没有var关键字的变量
在学校里,有这样的文字: 如果您声明一个变量,而不使用“var”,则该变量始终变为全局变量Javascript 声明没有var关键字的变量,javascript,variables,global-variables,declaration,Javascript,Variables,Global Variables,Declaration,在学校里,有这样的文字: 如果您声明一个变量,而不使用“var”,则该变量始终变为全局变量 在函数中声明全局变量有用吗?我可以想象在一些事件处理程序中声明一些全局变量,但它有什么好处呢?更好地使用RAM?不,没有RAM的好处或类似的东西 我所说的就是我所说的。考虑这个函数: function foo() { var variable1, variable2; variable1 = 5; varaible2 = 6; return variable1 + var
在函数中声明全局变量有用吗?我可以想象在一些事件处理程序中声明一些全局变量,但它有什么好处呢?更好地使用RAM?不,没有RAM的好处或类似的东西 我所说的就是我所说的。考虑这个函数:
function foo() {
var variable1, variable2;
variable1 = 5;
varaible2 = 6;
return variable1 + variable2;
}
看起来很简单,但它返回的是NaN
,而不是11
,因为varaible2=6上的输入错误代码>行。它创建了一个带有键入名称的全局变量:
函数foo(){
变量1,变量2;
变量1=5;
变量2=6;
返回变量1+变量2;
}
console.log(foo());//楠
console.log(varaible2);//6?!?!?!代码>不,没有RAM好处或类似的东西
我所说的就是我所说的。考虑这个函数:
function foo() {
var variable1, variable2;
variable1 = 5;
varaible2 = 6;
return variable1 + variable2;
}
看起来很简单,但它返回的是NaN
,而不是11
,因为varaible2=6上的输入错误代码>行。它创建了一个带有键入名称的全局变量:
函数foo(){
变量1,变量2;
变量1=5;
变量2=6;
返回变量1+变量2;
}
console.log(foo());//楠
console.log(varaible2);//6?!?!?!代码>全局变量的唯一用途是如果需要全局访问它们。在这种情况下,您应该在函数外部使用var
关键字来声明它们,以明确您确实想要创建全局变量,并且在尝试声明局部变量时不要忘记var
通常,您应该尝试确定代码的范围,以便在全局范围内尽可能少地使用代码。脚本中使用的全局变量越多,就越不可能与其他脚本一起使用
通常情况下,函数中的变量应该是局部变量,这样当您退出函数时,它们就会消失。全局变量的唯一用途是当您需要全局访问它们时。在这种情况下,您应该在函数外部使用var
关键字来声明它们,以明确您确实想要创建全局变量,并且在尝试声明局部变量时不要忘记var
通常,您应该尝试确定代码的范围,以便在全局范围内尽可能少地使用代码。脚本中使用的全局变量越多,就越不可能与其他脚本一起使用
通常情况下,函数中的变量应该是局部变量,这样当您退出函数时它们就会消失。有时在函数中创建新的全局可访问属性非常有用,以后可以通过引用窗口对象轻松访问这些属性(所有全局声明的属性都附加到窗口对象)
然而,与通常将任何内容声明为全局可访问时一样,它可能会在以后导致问题,因为这些属性很容易被覆盖等。最好只将值作为参数传递给函数并检索其结果。有时在函数中创建新的全局可访问属性非常有用,因为稍后可以通过引用窗口对象轻松访问(所有全局声明的属性都附加到窗口对象)
但是,与通常将任何内容声明为全局可访问时一样,它可能会导致以后出现问题,因为这些属性很容易被覆盖等。最好是将值作为参数传递给函数并检索其结果。主要问题是其他人可能已经在使用同名的全局
然后,当您更改全局变量的值时,您将覆盖它们的值
稍后,当下次使用全局时,它将神秘地发生变化。主要问题是其他人可能已经在使用同名的全局
然后,当您更改全局变量的值时,您将覆盖它们的值
稍后,当下次使用全局变量时,它将神秘地发生变化。忘记var的副作用
隐式全局变量和显式定义的全局变量之间有一个细微的区别。
不同之处在于使用delete运算符取消定义这些变量的能力:
•使用var创建的全局变量(在任何函数之外的程序中创建的)
无法删除
•不使用var创建的隐含全局变量(无论是否在函数内部创建)可以
删除
这表明隐含全局变量在技术上不是实变量,但它们是属性
全局对象的。属性可以使用delete运算符删除,而变量
不能:
在ES5严格模式中,对未声明变量(如两个反模式)的赋值
在前面的代码段中)将引发错误
JavaScript模式,由斯托扬·斯特凡诺夫(O'Reilly)撰写。版权所有2010雅虎!,公司,9780596806750.忘记var时的副作用
隐式全局变量和显式定义的全局变量之间有一个细微的区别。
不同之处在于使用delete运算符取消定义这些变量的能力:
•使用var创建的全局变量(在任何函数之外的程序中创建的)
无法删除
•不使用var创建的隐含全局变量(无论是否在函数内部创建)可以
删除
这表明隐含全局变量在技术上不是实变量,但它们是属性
全局对象的。属性可以使用delete运算符删除,而变量
不能:
在ES5严格模式中,对未声明变量(如两个反模式)的赋值
在前面的代码段中)将引发错误
JavaScript模式,由斯托扬·斯特凡诺夫(O'Reilly)撰写。版权所有2010雅虎!,