Javascript全局变量var与不var的区别深入解析


Posted in Javascript onDecember 09, 2013

相信你对全局变量一定不陌生,在函数作用域里用a=1这种形式定义的变量会是一个全局变量,在全局作用域里,用下面3种形式都可以创建对全局可见的命名:

<script>
var a = 1;
b = 2;
window.c = 3;
</script>

对于b=2这种方式, 它其实和c是一样的,在执行这个赋值语句的时候,会沿着作用域链寻找名字叫做b的变量,一直找到作用域链的顶端还没有找到,于是给window添加一个属性b然后赋值。

var与不var有两个区别:

1 var的全局变量不能被删除,因为delete智能删除对象的可删除的属性,而通过var 定义的全局属性会被标明不可删除。需要说明的是,delete不成功并不会抛错,delete的返回值是true|false。

2 var定义的全局变量会被提升,而不用var定义的全局变量不会被提升。可以看下面程序的执行结果:

<script>
alert(a);
var a=1;
</script>

<script>
alert(a);//error, a undefined
a=1;
</script>
Javascript 相关文章推荐
jquery tools 系列 scrollable学习
Sep 06 Javascript
js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解
Nov 09 Javascript
javascript如何实现360度全景照片问题汇总
Apr 04 Javascript
字符串反转_JavaScript
Apr 28 Javascript
JavaScript实现时间倒计时跳转(推荐)
Jun 28 Javascript
BootStrapValidator初使用教程详解
Feb 10 Javascript
JS给按钮添加跳转功能类似a标签
May 30 Javascript
详解基于vue-cli优化的webpack配置
Nov 06 Javascript
vue2.0父子组件间传递数据的方法
Aug 16 Javascript
使用gulp构建前端自动化的方法示例
Dec 25 Javascript
jQuery基于随机数解决中午吃什么去哪吃问题示例
Dec 29 jQuery
小程序如何构建骨架屏
May 29 Javascript
jquery div拖动效果示例代码
Dec 08 #Javascript
jquery垂直公告滚动实现代码
Dec 08 #Javascript
jquery中交替点击事件toggle方法的使用示例
Dec 08 #Javascript
JavaScript 判断用户输入的邮箱及手机格式是否正确
Dec 08 #Javascript
jqplot通过ajax动态画折线图的方法及思路
Dec 08 #Javascript
JavaScript 32位整型无符号操作示例
Dec 08 #Javascript
Extjs4中tree的拖拽功能(可以两棵树之间拖拽) 简单实例
Dec 08 #Javascript
You might like
谏山创故乡大分县日田市水坝将设立《进击的巨人》立艾伦、三笠以及阿尔敏的铜像!
2020/03/06 日漫
WAMP环境中扩展oracle函数库(oci)
2015/06/26 PHP
Zend Framework教程之Zend_Layout布局助手详解
2016/03/04 PHP
PHP 接入微信扫码支付总结(总结篇)
2016/11/03 PHP
php 中奖概率算法实现代码
2017/01/25 PHP
PHP递归统计系统中代码行数
2019/09/19 PHP
PHP7 错误处理机制修改
2021/03/09 PHP
JavaScript入门教程(11) js事件处理
2009/01/31 Javascript
Javascript解决常见浏览器兼容问题的12种方法
2010/01/04 Javascript
js 判断一个元素是否在页面中存在
2012/12/27 Javascript
限制textbox或textarea输入字符长度的JS代码
2013/10/16 Javascript
js实现简洁大方的二级下拉菜单效果代码
2015/09/01 Javascript
基于jquery实现动态竖向柱状条特效
2016/02/12 Javascript
Angularjs 实现一个幻灯片示例代码
2016/09/08 Javascript
微信小程序 picker-view 组件详解及简单实例
2017/01/10 Javascript
巧用canvas
2017/01/21 Javascript
深入理解在JS中通过四种设置事件处理程序的方法
2017/03/02 Javascript
angular中ui calendar的一些使用心得(推荐)
2017/11/03 Javascript
p5.js入门教程之图片加载
2018/03/20 Javascript
jquery拖拽自动排序插件使用方法详解
2020/07/20 jQuery
Makefile/cmake/node-gyp中区分判断不同平台的方法
2018/12/18 Javascript
解决echarts的多个折现数据出现坐标和值对不上的问题
2018/12/28 Javascript
ES6知识点整理之数组解构和字符串解构的应用示例
2019/04/17 Javascript
ES6 class类链式继承,实例化及react super(props)原理详解
2020/02/15 Javascript
vue data对象重新赋值无效(未更改)的解决方式
2020/07/24 Javascript
vue-cli打包后本地运行dist文件中的index.html操作
2020/08/12 Javascript
[43:41]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
python实现逆波兰计算表达式实例详解
2015/05/06 Python
Python K最近邻从原理到实现的方法
2019/08/15 Python
python导入不同目录下的自定义模块过程解析
2019/11/18 Python
python3实现将json对象存入Redis以及数据的导入导出
2020/07/16 Python
2014年司机工作总结
2014/11/21 职场文书
JavaScript实现淘宝商品图切换效果
2021/04/29 Javascript
python使用openpyxl库读写Excel表格的方法(增删改查操作)
2021/05/02 Python
Java使用JMeter进行高并发测试
2021/11/23 Java/Android
JS class语法糖的深入剖析
2022/07/07 Javascript