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

[javascript] view plaincopyprint?
  1. var x = "XX";
  2. y ="xxx";
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 .

转载于:https://www.cnblogs.com/ranran/p/4000129.html

为什么JavaScript声明变量的时候鼓励加var关键字相关推荐

  1. JavaScript声明变量详解

    前言 如果文章中有出现纰漏.错误之处,还请看到的小伙伴多多指教,先行谢过 在ES5阶段,JavaScript 使用 var 和 function 来声明变量, ES6 中又添加了let.const.i ...

  2. javascript 声明变量var、let、const详解及示例

    1. var.let.const概述 ES6发布前,Javascript只能通过var声明变量的方式,常量.块级变量.函数变量这些概念的差别都不能很好的体现出来,于此同时,加入你要使用或者提供一个ap ...

  3. php 类static引用函数吗,php中在变量和函数前加static关键字之后的区别

    static全局变量和普通全局变量,static局部变量和普通局部变量,static函数与普通函数的区别?下面本文将一一为你解答. (1)全局变量(外部变量)的说明之前再冠以static 就构成了静态 ...

  4. Javascript——声明提升(函数、变量提升)

    文章目录 一. 声明提升 1.1 示例讲解(变量提升) 1.2 示例讲解(函数提升) 二.解决方案 2.1 使用赋值 详解 三.exercise 一. 声明提升 声明提升是JavaScript中的一个 ...

  5. 2 javascript视频教程 变量和数据类型

    参考书<JavaScript从入门到精通> 当然,最权威的还是犀牛书<javascript权威指南>这个就当字典吧.不适合初学者. 返回知识列表:JavaScript知识列表 ...

  6. var let const声明变量的区别

    在js中定义变量的方式有三种,其中let和const关键字是来自ES6中的,下面将逐一介绍各个关键字声明变量的特点. var声明变量 var 是一个 JS关键字,用来声明变量( variable 变量 ...

  7. php变量和js变量的区别吗,JS声明变量的3种方式和区别

    JavaScript 是弱类型语言,可以不需要声明变量而直接使用.这样虽然简单但不易发现变量名方面的错误,所以不建议这样做.通常的做法是在使用 JavaScript 变量前先声明变量.目前,JavaS ...

  8. Javascript 声明时用“var”跟不用var的区别

    Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的.可以正常运行的代码并不代表是合适的代码. var num = 1: 是在 ...

  9. Javascript 私有变量

    转自Javascript高级程序设计(第三版): 任何在函数中定义的变量,都可以认为是私有变量,因为不能在函数的外部访问这些变量.私有变量包括函数的参数,局部变量以及在函数内部定义的其他函数. 如果在 ...

  10. ES6Let简介 使用Let声明变量好处

    使用Let声明变量 ES6不仅引入了let关键字用于解决变量声明的问题,同时引入了块级作用域的概念. 块级作用域: 代码执行时遇到花括号{会创建一个块级作用域.花括号}结束,销毁块级作用域. let ...

最新文章

  1. 3D车道线检测:Gen-LaneNet
  2. Java开发中最常犯的10个错误,你中招了吗?
  3. 如何正确的对待设计模式——我的观点
  4. mysql对执行结果进行html格式的输出?输出html格式?
  5. 动态链接库dll,静态链接库lib, 导入库lib 转
  6. C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板成员函数的实例化
  7. 用c语言编写数码管的显示函数,各位大神,如何用C语言实现在数码管上实现1234同时亮...
  8. JavaSE各阶段练习题----Map
  9. SAP ABAP Netweaver里进程能够申请的最大内存
  10. java 刽子手游戏_java基础(九):容器
  11. WinForm 之 程序退出
  12. 华为云TaurusDB性能挑战赛-java赛题mvn编译时报错:不支持multi-catch
  13. 苏宁易购:全国1071万高考生可免费领取SUPER会员
  14. 前端人员必须掌握哪些技术?常见缓存种类有什么?
  15. php连贯操作,Thinkphp 3.2.3 sql的一些连贯操作方法
  16. 加密货币的寒冬如何破冰?
  17. Android给scrollView截图超过屏幕大小形成长图
  18. VirtualBox中,Windows虚拟机与主机共享文件夹不能用之一例
  19. 真随机数 c语言编程,C语言真正获取随机数
  20. 工业机器人的构成和分类

热门文章

  1. Linux设备驱动模型-Device
  2. 要搞懂 volatile 关键字,就靠这 26 张图
  3. VIM命令记录和cscope结合使用
  4. freeswitch 配置动态会议的注意事项
  5. T - hiho字符串 HihoCoder - 1485 (..map的使用把)
  6. dev多行注释_Shell 实现多行注释的几种常用方法
  7. 3991. 满足条件的01串-AcWing题库
  8. spring boot中问题总结
  9. Hbase KeyValue结构详解
  10. (详解)11年真题:求两个序列合并后的的中位数