javascript中加var和不加var的区别 你真的懂吗


Posted in Javascript onJanuary 06, 2016

Javascript是遵循ECMAScript标准下的一个产物,自然ECMAScript的标准其要遵循。

先来看下var关键字的定义和用法

var 语句用于声明变量。

JavaScript 变量的创建也叫作"声明"一变量:

var carName;

变量声明后,变量为空 (没有值)。

为变量复制,操作如下:

carName = "Volvo";

声明变量时,你同样可以为变量赋值:

var carName = "Volvo";

语法

var varname = value;

参数值

 

参数 描述
varname 必须。指定变量名。 变量名可以包含字母,数字,下划线和美元符号。 变量名必须以字母开头 变量名也可以以$和_开头(但一般不这么用) 变量名是大小写敏感的(y和Y是不同的变量) 保留字(如JavaScript关键字)不能作为变量名使用
value 可选。指定变量的值。注意: 如果变量声明未指定值,其默认值为 undefined

大家都看了很多文章,都说避免隐式声明全局变量,就是说声明变量前必须加'var',那加了'var'和不加'var'到底有啥区别呢?

 先来看一段代码

var a = 'aa';
alert(a); //弹出 'aa'
alert(window.a)//弹出'aa'

明白了吧,你声明一个全局变量其实是给'window'对象增加了一个属性,下面一段代码有相同效果

a = 'aa';
alert(a); //弹出 'aa'
alert(window.a)//弹出'aa'

那"var a = 'aa' " 和 "a = 'aa' " 都是全局变量,有啥区别了? 看下面两段段代码

var a = 'aa';
delete window.a; // false 
a = 'aa';
delete window.a; // true

都是为'window'对象增加了属性,一个可以删除,一个不能删除。但是加上'var'就可以作用域相关了,不加'var'始终都是在为'window'对象动态添加属性,以下代码为证

var test = function(){
 a = 'aa';
}
test();
alert(window.a);//弹出'aa'

 由于window对象是全局对象,因此默认可以不加,下面这段同样效果

var test = function(){
 a = 'aa';
}
test();
alert(a);//弹出'aa'

说到这,认真思考的同学现在必然有个疑问, 为啥隐式声明的全局变量可以删除,显式声明的全局变量就无法删除?

原因是"delete 不可以删除那些可配置性为false的属性" ,某些内置对象的属性是不可配置的,比如通过变量声明或者函数声明创建的全局对象的属性,以下代码为证

delete Object.prototype; // false 不可删除,该属性是不可配置的
var a = 'aa';
delete window.a;//false 不可删除,该属性是不可配置的
function test(){};
delete window.test;//false 不可删除,该属性是不可配置的

那这样不就明白了,通过'var'声明的全局变量,其实际上是为'window'对象增加了一个不可配置的属性, 而不加'var'声明的全局变量,其实际上是为'window'对象增加了一个可以配置的属性。

注意了,以上使用window的地方,window都可以用this代替,如:

var test = function(){
 a = 'aa';
}
test();
alert(this.a);//弹出'aa'

至于原因,请查看鄙人之前写的文章 'this,this,再次讨论javascript中的this,超全面'

下面拉出javascript中的var关键字,给大家单独讲解。

我们知道定义变量的时候,我们需要用到Var关键字,使用Var关键字时,我们需要注意他的使用方法:
下面几个列子,充分说明了Var在使用和不使用、全局变量和局部变量定义时,有不同的执行结果。

var var01 = 1;
function funtest() {
 document.write(var01);
 var var01 = 0;
}

结果为:undefined

var var01 = 1;
function funtest() {
 document.write(var01);
 var01 = 0;
}

结果为:1

var01 = 1;
function funtest() {
 document.write(var01);
 var var01 = 0;
}

结果为:undefined

var01 = 1;
function funtest() {
 document.write(var01);
 var01 = 0;
}

结果为:1

看到这里对javascript中的var你了解多少,相信大家通过本文学习多多少少都会有点收获的吧。欲了解更多关于javascript var相关知识请持续关注本站,谢谢!

Javascript 相关文章推荐
jQuery 1.0.4 - New Wave Javascript(js源文件)
Jan 15 Javascript
在Z-Blog中运行代码[html][/html](纯JS版)
Mar 25 Javascript
jQuery 定时局部刷新(setInterval)
Nov 19 Javascript
JS左右无缝滚动(一般方法+面向对象方法)
Aug 17 Javascript
如何让页面加载完成后执行js
Jun 26 Javascript
jquery实现滑动图片自己测试的例子
Nov 05 Javascript
按下Enter焦点移至下一个控件的实现js代码
Dec 11 Javascript
Jquery异步提交表单代码分享
Mar 26 Javascript
js改变css样式的三种方法推荐
Jun 28 Javascript
微信小程序iBeacon测距及稳定程序的实现解析
Jul 31 Javascript
Postman无法正常返回结果问题解决
Aug 28 Javascript
vue前端和Django后端如何查询一定时间段内的数据
Feb 28 Vue.js
JavaScript引用类型和基本类型详解
Jan 06 #Javascript
js模仿java的Map集合详解
Jan 06 #Javascript
JavaScript中iframe实现局部刷新的几种方法汇总
Jan 06 #Javascript
JavaScript iframe数据共享接口实现方法
Jan 06 #Javascript
js实现仿qq消息的弹出窗效果
Jan 06 #Javascript
2016年最热门的15 款代码语法高亮工具,美化你的代码
Jan 06 #Javascript
详解jQuery Mobile自定义标签
Jan 06 #Javascript
You might like
一个简单的PHP&MYSQL留言板源码
2020/07/19 PHP
探讨:如何编写PHP扩展
2013/06/13 PHP
实现在同一方法中获取当前方法中新赋值的session值解决方法
2014/06/26 PHP
非常全面的php日期时间运算汇总
2015/11/04 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
2016/03/23 PHP
tp5修改(实现即点即改)
2019/10/18 PHP
JavaScript的面向对象(二)
2006/11/09 Javascript
用jQuery实现检测浏览器及版本的脚本代码
2008/01/22 Javascript
JavaScript 快捷键设置实现代码
2009/03/13 Javascript
Jquery同辈元素选中/未选中效果的实例代码
2013/08/01 Javascript
jquery动态加载select下拉框示例代码
2013/12/10 Javascript
js获取页面传来参数的方法
2014/09/06 Javascript
JQuery中DOM加载与事件执行实例分析
2015/06/13 Javascript
jQuery tagsinput在h5邮件客户端中应用详解
2016/09/26 Javascript
JS中with的替代方法与String中的正则方法详解
2016/12/23 Javascript
JS使用面向对象技术实现的tab选项卡效果示例
2017/02/28 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
2017/03/01 Javascript
JavaScript事件处理程序详解
2017/09/19 Javascript
vue.js中proxyTable 转发请求的实现方法
2018/09/20 Javascript
轻松解决JavaScript定时器越走越快的问题
2019/05/13 Javascript
element-ui如何防止重复提交的方法步骤
2019/12/09 Javascript
如何在vue中使用百度地图添加自定义覆盖物(水波纹)
2020/11/03 Javascript
python计算程序开始到程序结束的运行时间和程序运行的CPU时间
2013/11/28 Python
Python实现Windows和Linux之间互相传输文件(文件夹)的方法
2017/05/08 Python
python win32 简单操作方法
2017/05/25 Python
详解一种用django_cache实现分布式锁的方式
2019/09/01 Python
详解Python 循环嵌套
2020/07/09 Python
python时间time模块处理大全
2020/10/25 Python
求最大连续递增数字串(如"ads3sl456789DF3456ld345AA"中的"456789")
2015/09/11 面试题
岗位廉洁从政承诺书
2014/03/27 职场文书
质量负责人任命书
2014/06/06 职场文书
双拥工作宣传标语
2014/06/26 职场文书
2015年初中元旦晚会活动总结
2014/11/28 职场文书
2019西餐厅创业计划书范文!
2019/07/12 职场文书
关于销售人员的年终工作总结要点
2019/08/15 职场文书
详解盒子端CSS动画性能提升
2021/05/24 HTML / CSS