javascript中加var和不加var的区别
Javascript是遵循ECMAScript标准下的一个产物,自然ECMAScript的标准其要遵循。
先来看下var关键字的定义和用法
var 语句用于声明变量。
JavaScript 变量的创建也叫作"声明"一变量:
var carName;
变量声明后,变量为空 (没有值)。
为变量复制,操作如下:
carName = "Volvo";
声明变量时,你同样可以为变量赋值:
var carName = "Volvo";
语法
var varname = value;
参数值
参数 | 描述 |
---|---|
varname | 必须。指定变量名。
变量名可以包含字母,数字,下划线和美元符号。
|
value | 可选。指定变量的值。 注意: 如果变量声明未指定值,其默认值为 undefined |
大家都看了很多文章,都说避免隐式声明全局变量,就是说声明变量前必须加'var',那加了'var'和不加'var'到底有啥区别呢?
先来看一段代码
1
2
3
|
var a = 'aa' ; alert(a); //弹出 'aa' alert(window.a) //弹出'aa' |
明白了吧,你声明一个全局变量其实是给'window'对象增加了一个属性,下面一段代码有相同效果
1
2
3
|
a = 'aa' ; alert(a); //弹出 'aa' alert(window.a) //弹出'aa' |
那"var a = 'aa' " 和 "a = 'aa' " 都是全局变量,有啥区别了? 看下面两段段代码
1
2
3
4
|
var a = 'aa' ; delete window.a; // false a = 'aa' ; delete window.a; // true |
都是为'window'对象增加了属性,一个可以删除,一个不能删除。但是加上'var'就可以作用域相关了,不加'var'始终都是在为'window'对象动态添加属性,以下代码为证
1
2
3
4
5
|
var test = function (){ a = 'aa' ; } test(); alert(window.a); //弹出'aa' |
由于window对象是全局对象,因此默认可以不加,下面这段同样效果
1
2
3
4
5
|
var test = function (){ a = 'aa' ; } test(); alert(a); //弹出'aa' |
说到这,认真思考的同学现在必然有个疑问, 为啥隐式声明的全局变量可以删除,显式声明的全局变量就无法删除?
原因是"delete 不可以删除那些可配置性为false的属性" ,某些内置对象的属性是不可配置的,比如通过变量声明或者函数声明创建的全局对象的属性,以下代码为证
1
2
3
4
5
|
delete Object.prototype; // false 不可删除,该属性是不可配置的 var a = 'aa' ; delete window.a; //false 不可删除,该属性是不可配置的 function test(){}; delete window.test; //false 不可删除,该属性是不可配置的 |
那这样不就明白了,通过'var'声明的全局变量,其实际上是为'window'对象增加了一个不可配置的属性, 而不加'var'声明的全局变量,其实际上是为'window'对象增加了一个可以配置的属性。
注意了,以上使用window的地方,window都可以用this代替,如:
1
2
3
4
5
|
var test = function (){ a = 'aa' ; } test(); alert( this .a); //弹出'aa' |
至于原因,请查看鄙人之前写的文章 'this,this,再次讨论javascript中的this,超全面'
下面拉出javascript中的var关键字,给大家单独讲解。
我们知道定义变量的时候,我们需要用到Var关键字,使用Var关键字时,我们需要注意他的使用方法:
下面几个列子,充分说明了Var在使用和不使用、全局变量和局部变量定义时,有不同的执行结果。
1
2
3
4
5
|
var var01 = 1; function funtest() { document.write(var01); var var01 = 0; } |
结果为:undefined
1
2
3
4
5
|
var var01 = 1; function funtest() { document.write(var01); var01 = 0; } |
结果为:1
1
2
3
4
5
|
var01 = 1; function funtest() { document.write(var01); var var01 = 0; } |
结果为:undefined
1
2
3
4
5
|
var01 = 1; function funtest() { document.write(var01); var01 = 0; } |
结果为:1
看到这里对javascript中的var你了解多少,相信大家通过本文学习多多少少都会有点收获的吧。欲了解更多关于javascript var相关知识请持续关注本站,谢谢!
最新文章
- 【转】Dubbo使用例子并且和Spring集成使用
- C语言 关于内存动态分配问题
- script async 和script defer的区别
- One EEG preprocessing pipeline - EEG-fMRI paradigm
- python 线程之 threading(四)
- 产品列表页分类筛选、排序的算法实现(PHP)
- SeedDms 文档管理系统安装
- Java基础之线程——派生自Thread类的子类(TryThread)
- EXW_FOB_CIF_CFR 外贸报价方式&;条款之间的区别与联系
- AeroSpike 记录
- SDWebImage源码解读之分类
- [Mac]secureCRT私钥转换为mac ssh私钥
- 使用robot_pose_ekf对传感器信息融合
- Discrete Log Algorithms :Baby-step giant-step 【二】
- Git -- 从远程库克隆
- Android SDK更新8.1.0时报错
- Redis之字符串类型命令
- Jenkins可持续集成
- groovy函数、字符串、循环
- MAC OS X常用命令总结
热门文章
- gec210 NAND BOOT与SD BOOT启动原理
- 编译安装mysql-server5.6.32手记
- SQL查询今天、昨天、7天内、30天
- Java 的String类
- Memcached Client的释疑
- php之 人员的权限管理(RBAC)
- redis.clients.jedis.exceptions.JedisDataException: ERR Client sent AUTH, but no password is set
- mvc文件上传支持批量上传,拖拽以及预览,文件内容校验等
- 【python基础】之list列表
- Hadoop学习笔记-001-CentOS_6.5_64_连接外网设置