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

 更新时间:2014年09月29日 16:29:57   投稿:whsnow  
var用来声明变量,但是这个语法并不严格要求,很多时修改,我们可以直接使用一个变量而不用var声明它,不过还是建议大家加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 .

相关文章

  • javascript循环链表之约瑟夫环的实现方法

    javascript循环链表之约瑟夫环的实现方法

    这是一道比较经典的循环链表问题,在华为上机笔试中也出现过。 约瑟夫环是一个数学的应用问题,下面这篇文章主要就给大家介绍了javascript循环链表之约瑟夫环的实现方法,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-01-01
  • 使用fileReader的一个坑及解决

    使用fileReader的一个坑及解决

    这篇文章主要介绍了使用fileReader的一个坑及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • bootstrapValidator 重新启用提交按钮的方法

    bootstrapValidator 重新启用提交按钮的方法

    bootstrapValidator 使用中,由于字段检查等原因,致使提交按钮失效。如何重新启用提交按钮呢?下面小编给大家介绍下bootstrapValidator 重新启用提交按钮的方法,需要的朋友可以参考下
    2017-02-02
  • 微信小程序van-field中的left-icon属性自定义实现过程

    微信小程序van-field中的left-icon属性自定义实现过程

    在小程序中,我们是用 Vant 组件库时,常常会用到 van-field 输入框控件,今天我将跟大家分享的是 van-field 输入框控件中的 left-icon 属性的自定义怎么实现,感兴趣的朋友一起看看吧
    2023-08-08
  • JS实现样式清新的横排下拉菜单效果

    JS实现样式清新的横排下拉菜单效果

    这篇文章主要介绍了JS实现样式清新的横排下拉菜单效果,通过简单的元素遍历控制页面元素的动态切换效果,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • 如何理解JavaScript模块化

    如何理解JavaScript模块化

    模块化简单来说就是将一个完整的长篇代码文件根据功能进行划分成几个文件,这些文件各自负责一个独立的功能,各个文件组合起来实现一个完整的大功能,这就是模块化,每个负责独立功能的文件就是模块。
    2021-05-05
  • Js实现复选框的全选、全不选反选功能代码实例

    Js实现复选框的全选、全不选反选功能代码实例

    这篇文章主要介绍了Js实现复选框的全选、全不选和反选,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • 被jQuery折腾得半死,揭秘为何jQuery为何在IE/Firefox下均无法使用

    被jQuery折腾得半死,揭秘为何jQuery为何在IE/Firefox下均无法使用

    某学员前日实施一个Web项目实施发生了悲剧,找到我求解决,把我也折腾个半死。
    2010-01-01
  • js实现收缩菜单效果实例代码

    js实现收缩菜单效果实例代码

    这篇文章介绍了js实现收缩菜单效果实例代码,有需要的朋友可以参考一下
    2013-10-10
  • 一步步教你实现微信小程序自定义组件

    一步步教你实现微信小程序自定义组件

    之前做小程序开发的时候,对于开发来说比较头疼的莫过于自定义组件了,下面这篇文章主要给大家介绍了关于微信小程序自定义组件的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-03-03

最新评论