当前位置: 首页 > 编程笔记 >

JavaScript声明变量时为什么要加var关键字

谯德元
2023-03-14
本文向大家介绍JavaScript声明变量时为什么要加var关键字,包括了JavaScript声明变量时为什么要加var关键字的使用技巧和注意事项,需要的朋友参考一下

在JavaScript中,var用来声明变量,但是这个语法并不严格要求,很多时修改,我们可以直接使用一个变量而不用var声明它。


var x = "XX"; 

y ="xxx"; 


诸如此类。这有一个问题,比如说在代码中的某一行,我想使用的一个已声明的变量x,结果由于打字或者拼写错误,这个变量被写成y了,结果相当于“隐式”声明了一个变量y,在实际编程过程中,这种错误有时比较难以发现。
当你在当前上下文内进行这种“隐式”声明时,JavaScript引擎会先在当前上下文中寻找是否之前有声明此变量,如果没有,再到上一级的上下文中去寻找,如果一直未找到,会最后在window上声明这个变量!
比如:

代码如下:

window. y = "hello"; 
function func(){ 
y = "OH, NO!!!"; 
} 
func(); 
alert(window.y); //#=> display "OH, NO!!!" 

当上下文中的任意一层有这种“隐式”定义的变量时,那么该层的该变量会被修改,而不会在window上生成一个新的变量。(这种bug也挺讨厌的,尤其是封装的比较复杂的代码)
比如:

代码如下:

var x = "window.x"; 
function a() { 
var x = "a's x"; 
var b = function() { 
var c = function() { 
//no var! 
x = "c's x:"; 
}; 
alert("before c run,the b.x:" + x); 
c(); 
alert("after c run, the b.x:" + x); 
}; 
alert("a.x is:" + x); 
b(); 
alert("after b function runed, the a.x is:" + x); 
}; 
alert("before a run, window.x:" + x); 
a(); 
alert("after a run, window.x:" + x); 

这里面有以下几层:window, func a, func b, func c一直作层级嵌套。window->a->b->c
window和a中,都有定义变量x,b中未定义该变量,在c中‘隐式'声明了一个x,该x最终修改了a变量的值。
牢记,在JavaScript中,声明变量,一定前面要加var .

 类似资料:
  • 问题内容: 如果声明变量而不使用“ var”,则变量始终变为GLOBAL。 在函数内部声明全局变量是否有用?我可以想象在某个事件处理程序中声明一些全局变量,但这有什么用呢?更好地使用RAM? 问题答案: 不,没有RAM好处或类似的好处。 w3schools谈论的是我所说的“内隐全球性恐怖” 。考虑以下功能: 看起来很简单,但是由于线路上的错字,它返回,而不是。并创建一个带有输入错误名称的全局变量:

  • 我在网上搜索声明局部变量的方法,偶然发现了这个Oracle页面。该页面谈到了使用关键字“VAR”。 我正在使用IntelliJ,我相信我正确地将我的项目设置为使用“VAR”,但它不能正常工作。你知道我做错了什么吗? 在项目语言水平上,我也尝试了10个但没有区别。

  • 问题内容: 当我阅读docker / distribution源代码的副本时,我发现有声明的变量使我很困惑。 代码是: 我不知道声明是什么意思,希望能得到一些帮助。 问题答案: 从常见问题解答: 您可以通过尝试分配,要求编译器检查类型T是否实现了接口I: 在这种情况下,空白标识符_代表此处不需要的变量名(从而防止出现“已声明但未使用”错误)。 规格中的更一般性: 空白标识符提供了一种忽略分配中右侧

  • 本文向大家介绍JavaScript变量声明var,let.const及区别浅析,包括了JavaScript变量声明var,let.const及区别浅析的使用技巧和注意事项,需要的朋友参考一下 var声明变量的作用域限制在其声明位置的上下文中 let 声明的变量只在其声明的块或子块中可用,var的作用域是整个封闭函数 在 ECMAScript 2015 中,let绑定不受变量提升的约束,这意味着le

  • 问题内容: 在Java中,当声明一个字符串变量时,单词“ String”被大写,但是我遇到的其他任何类型都不是(例如,“ int”或“ double”)。为什么是这样?设计师是否只是一些奇怪的任意决定? 问题答案: 为什么在Java中将字符串变量的声明大写? 该类型的资本,因为它是一个 类 ,象,而不是一个原始类型像或(其他类型,你可能跑过)。 作为一个类,遵循Sun提出的Java命名约定。简而言

  • 问题内容: “ var”是可选的吗? 如同 ? 我发现它们都可以通过我的测试工作,我认为这是可选的。那正确吗? 问题答案: 他们的意思不同。如果使用变量,则在范围内声明变量(例如,在函数中)。如果不使用,则变量会在作用域的各个层中冒出气泡,直到遇到给定名称的变量或全局对象(如果在浏览器中是窗口,则为窗口),然后将变量附加到该变量。这与全局变量非常相似。但是,仍然可以使用删除它(很可能是其他人的代码