JavaScript中的变量定义与储存介绍


Posted in Javascript onDecember 31, 2014

与C、Java等编程语言不同,JavaScript中的变量是无类型的,所有的变量定义使用的关键词均为var:

var a;

var m, n;

var x=42, y="test";

如果定义变量后未对该变量进行赋值,那么该变量的值为undefined。如上面代码中的a、m、n三个变量的值均为undefined。

由于JS中变量是无类型的,因此完全可以对同一个变量进行不同类型的赋值,如:

var b = "temp";

console.log(typeof b);//string

b = 108;

console.log(typeof b);//number

除了可以对同一变量进行不同类型的赋值,JavaScript中还可以对变量进行重复定义;如果这么做,则第一次之后的变量定义语句等价于赋值语句:

var c = "hello";

console.log(c);//hello

var c = true;

console.log(c);//true

在ECMAScript标准的严格模式(strict mode)下,所有的变量定义均需使用var关键词。如果不使用严格模式,那么当JS程序对某个未被定义过的变量进行赋值时,程序将在JS全局对象中创建一个名称与该变量相同的属性,也即创建一个新的全局变量。这种做法会带来很多问题(比如,多个JS程序间产生全局变量污染等),给后期维护带来不小的麻烦;因此在实际开发过程中,应当尽量避免使用这种做法。

变量的储存

如果定义的变量为全局变量,同时在变量定义过程中没有使用var关键词,那么该变量会作为全局对象的属性而存在,可以通过访问this(全局对象)的相应属性而获得,也可以通过使用delete关键词将其从全局对象中删除掉:

var e = "globalVariableValue";//defined outside of any function, it is a global variable, but does not store in "this"

f = "globalVariableValue2";

this.g = "globalVariableValue3";

console.log(this.e);//undefined

console.log(this.f);//globalVariableValue2

console.log(this.g);//globalVariableValue3
delete f;

delete g;

console.log(this.f);//undefined

console.log(this.g);//undefined

对于JavaScript中的每一次函数调用,JavaScript都会创建一个局部对象以储存在该函数中定义的局部变量;如果在该函数内部还有一个嵌套定义的函数(nested function),那么JavaScript会在已经定义的局部对象内部再定义一个嵌套局部对象。对于一个函数,其内部有多少层的嵌套函数定义,也就有多少层的嵌套局部对象。该局部对象称为“函数调用对象”(ECMAScript 3中的“call object”,ECMAScript 5中改名为“declarative environment record”,但个人认为还是ECMAScript 3中的名称更容易理解一些)。

与全局对象this相反,JavaScript中不提供任何方式来访问这些局部对象(函数调用对象)。因此,开发人员无法对这些局部对象进行操作。不过,理解这些函数调用对象对于理解JavaScript中的一些概念会有很大的帮助,比如说变量的作用域和闭包。

Javascript 相关文章推荐
破解Session cookie的方法
Jul 28 Javascript
js输出列表实现代码
Sep 12 Javascript
jQuery焦点图切换特效插件封装实例
Aug 18 Javascript
举例讲解AngularJS中的模块
Jun 17 Javascript
js改变style样式和css样式的简单实例
Jun 28 Javascript
微信小程序 五星评价功能的实现
Mar 09 Javascript
微信小程序获取用户openId的实现方法
May 23 Javascript
JS鼠标3次点击事件实现代码及扩展思路
Sep 12 Javascript
Angular中支持SCSS的方法
Nov 18 Javascript
深入理解JavaScript的async/await
Aug 05 Javascript
Vue + Element UI图片上传控件使用详解
Aug 20 Javascript
微信小程序组件生命周期的踩坑记录
Mar 03 Javascript
JavaScript中的操作符==与===介绍
Dec 31 #Javascript
jQuery中[attribute]选择器用法实例
Dec 31 #Javascript
JavaScript中的比较操作符>、=、
Dec 31 #Javascript
javascript 操作符(~、&、|、^、)使用案例
Dec 31 #Javascript
JavaScript中的逻辑判断符&&、||与!介绍
Dec 31 #Javascript
JavaScript中的eval()函数使用介绍
Dec 31 #Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
Dec 31 #Javascript
You might like
实测在class的function中include的文件中非php的global全局环境
2013/07/15 PHP
php采用session实现防止页面重复刷新
2015/12/24 PHP
最新最全PHP生成制作验证码代码详解(推荐)
2016/06/12 PHP
PHP内存溢出优化代码详解
2021/02/26 PHP
arguments对象
2006/11/20 Javascript
jquery eval解析JSON中的注意点介绍
2013/08/23 Javascript
举例讲解Node.js中的Writable对象
2015/07/29 Javascript
JavaScript中子对象访问父对象的方式详解
2016/09/01 Javascript
Javascript+CSS3实现进度条效果
2016/10/28 Javascript
bootstrap实现每隔5秒自动轮播效果
2016/12/20 Javascript
微信小程序 支付功能(前端)的实现
2017/05/24 Javascript
AngularJS遍历获取数组元素的方法示例
2017/11/11 Javascript
layui动态表头的实现代码
2019/08/22 Javascript
vue data引入本地图片的两种方式小结
2019/11/13 Javascript
详解ES6实现类的私有变量的几种写法
2021/02/10 Javascript
利用Python获取操作系统信息实例
2016/09/02 Python
python爬虫爬取淘宝商品信息(selenum+phontomjs)
2018/02/24 Python
Python OpenCV获取视频的方法
2018/02/28 Python
Python实现聊天机器人的示例代码
2018/07/09 Python
关于Pycharm无法debug问题的总结
2019/01/19 Python
python爬虫模拟浏览器的两种方法实例分析
2019/12/09 Python
python mysql 字段与关键字冲突的解决方式
2020/03/02 Python
使用keras实现densenet和Xception的模型融合
2020/05/23 Python
Python批量获取并保存手机号归属地和运营商的示例
2020/10/09 Python
Pyqt助手安装PyQt5帮助文档过程图解
2020/11/20 Python
用CSS3实现瀑布流布局的示例代码
2017/11/10 HTML / CSS
德国高端单身人士交友网站:ElitePartner
2018/12/02 全球购物
雷朋巴西官方商店:Ray-Ban Brasil
2020/07/21 全球购物
教师师德承诺书
2014/03/26 职场文书
2014年入党积极分子党课学习心得体会模板
2014/04/03 职场文书
婚假请假条怎么写
2014/04/10 职场文书
小学教师求职信范文
2015/03/20 职场文书
教你用python实现12306余票查询
2021/06/30 Python
Vue.Draggable实现交换位置
2022/04/07 Vue.js
Springboot-cli 开发脚手架,权限认证,附demo演示
2022/04/28 Java/Android
关于MySQL中explain工具的使用
2023/05/08 MySQL