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 相关文章推荐
Jquery+JSon 无刷新分页实现代码
Apr 01 Javascript
window.location.href = window.location.href 跳转无反应 a超链接onclick事件写法
Aug 21 Javascript
页面加载完毕后滚动条自动滚动一定位置
Feb 20 Javascript
让table变成exls的示例代码
Mar 24 Javascript
javascript框架设计读书笔记之模块加载系统
Dec 02 Javascript
基于jQuery日历插件制作日历
Mar 11 Javascript
在JavaScript中模拟类(class)及类的继承关系
May 20 Javascript
jQuery层级选择器_动力节点节点Java学院整理
Jul 04 jQuery
javaScript强制保留两位小数的输入数校验和小数保留问题
May 09 Javascript
JavaScript面向对象继承原理与实现方法分析
Aug 09 Javascript
微信小程序全局变量的设置、使用、修改过程解析
Sep 24 Javascript
你不知道的 TypeScript 高级类型(小结)
Aug 28 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
PHP反射机制用法实例
2014/08/28 PHP
php从字符串创建函数的方法
2015/03/16 PHP
php计算整个目录大小的方法
2015/06/19 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
2015/12/18 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
2019/10/10 PHP
Maps Javascript
2007/01/22 Javascript
JQuery datepicker 使用方法
2011/05/20 Javascript
js使下拉列表框可编辑不止是选择
2013/12/12 Javascript
浅谈JavaScript中setInterval和setTimeout的使用问题
2015/08/01 Javascript
[原创]JQuery 在表单提交之前修改 提交的值
2016/04/14 Javascript
TypeScript入门-基本数据类型
2017/03/28 Javascript
JavaScript实现移动端轮播效果
2017/06/06 Javascript
vue导出html、word和pdf的实现代码
2018/07/31 Javascript
ajaxfileupload.js实现上传文件功能
2019/04/19 Javascript
JavaScript实现鼠标移入随机变换颜色
2020/11/24 Javascript
[49:27]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第一场
2018/04/05 DOTA
[41:21]夜魇凡尔赛茶话会 第三期02:看图识人
2021/03/11 DOTA
Python的__builtin__模块中的一些要点知识
2015/05/02 Python
Python字符和字符值(ASCII或Unicode码值)转换方法
2015/05/21 Python
利用python开发app实战的方法
2019/07/09 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
2019/11/19 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
2019/11/26 Python
PyTorch 随机数生成占用 CPU 过高的解决方法
2020/01/13 Python
python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配
2020/02/29 Python
什么是python的id函数
2020/06/11 Python
美国最古老的精致书写工具制造商:A.T. Cross(高仕)
2018/01/30 全球购物
美国学校用品、教室和教学商店:Discount School Supply
2018/04/04 全球购物
广州地球村科技数据库题目
2016/04/25 面试题
优秀员工评语
2014/02/10 职场文书
2014年社区居委会主任重阳节讲话稿
2014/09/25 职场文书
大学生党性分析材料
2014/12/19 职场文书
先进典型发言材料
2014/12/30 职场文书
怀孕辞职信怎么写
2015/02/28 职场文书
实习单位意见
2015/06/04 职场文书
Java面试题冲刺第十九天--数据库(4)
2021/08/07 Java/Android
golang中的struct操作
2021/11/11 Golang