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

2019-12-21,,,,

在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与Javascript变量隐式声明
  • Javascript var变量隐式声明方法
  • javascript循环变量注册dom事件 之强大的闭包
  • 关于JavaScript中var声明变量作用域的推断
  • 基于JavaScript 声明全局变量的三种方式详解
  • 一个JavaScript变量声明的知识点
  • 深入理解javascript变量声明
  • JavaScript变量声明详解
  • javascript定义变量时加var与不加var的区别
  • javascript定义变量时带var与不带var的区别分析
  • JavaScript判断变量是否为空的自定义函数分享
  • javascript中局部变量和全局变量的区别详解
  • JavaScript 变量、作用域及内存
  • javascript判断变量是否有值的方法
  • JavaScript声明变量名的语法规则
  • 浅析四种常见的Javascript声明循环变量的书写方式

《JavaScript声明变量时为什么要加var关键字.doc》

下载本文的Word格式文档,以方便收藏与打印。