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 (三) 管理jQuery包装集
Feb 23 Javascript
js调试系列 控制台命令行API使用方法
Jun 18 Javascript
再分享70+免费的jquery 图片滑块效果插件和教程
Dec 15 Javascript
javascript日期格式化方法汇总
Oct 04 Javascript
JavaScript代码判断点击第几个按钮
Dec 13 Javascript
莱鸟介绍javascript onclick事件
Jan 06 Javascript
AngularJS 避繁就简的路由
Jul 01 Javascript
移动端脚本框架Hammer.js
Dec 15 Javascript
详解VueJs前后端分离跨域问题
May 24 Javascript
vue中$nextTick的用法讲解
Jan 17 Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
Jun 12 Javascript
vue用ant design中table表格,点击某行时触发的事件操作
Oct 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常用代码大全(新手入门必备)
2010/06/29 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
2019/03/25 PHP
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
QQ邮箱的一个文本编辑器代码
2007/03/14 Javascript
简单的无缝滚动程序-仅几行代码
2007/05/08 Javascript
javascript 写类方式之五
2009/07/05 Javascript
jquery中ajax学习笔记一
2011/10/16 Javascript
JQuery实现鼠标滑过显示导航下拉列表
2013/09/12 Javascript
调用jQuery滑出效果时闪烁的解决方法
2014/03/27 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
JavaScript sup方法入门实例(把字符串显示为上标)
2014/10/20 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
详解js运算符单竖杠“|”与“||”的用法和作用介绍
2016/11/04 Javascript
jQuery选择器实例应用
2017/01/05 Javascript
详解微信小程序 登录获取unionid
2017/06/27 Javascript
jQuery中ajax请求后台返回json数据并渲染HTML的方法
2018/08/08 jQuery
微信小程序日历/日期选择插件使用方法详解
2018/12/28 Javascript
图文详解vue框架安装步骤
2019/02/12 Javascript
vue 实现根据data中的属性值来设置不同的样式
2020/08/04 Javascript
vue data变量相互赋值后被实时同步的解决步骤
2020/08/05 Javascript
python实现的登录和操作开心网脚本分享
2014/07/09 Python
python基础教程之基本数据类型和变量声明介绍
2014/08/29 Python
Python中对元组和列表按条件进行排序的方法示例
2015/11/10 Python
python开发之str.format()用法实例分析
2016/02/22 Python
深入解析Python中的__builtins__内建对象
2016/06/21 Python
Python处理JSON时的值报错及编码报错的两则解决实录
2016/06/26 Python
python读取几个G的csv文件方法
2019/01/07 Python
Python selenium自动化测试模型图解
2020/04/15 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
2020/05/19 Python
IE矩阵Matrix滤镜旋转与缩放及如何结合transform
2012/11/29 HTML / CSS
Sephora丝芙兰菲律宾官方网站:购买化妆品和护肤品
2017/04/05 全球购物
有趣的流行文化T恤、马克杯、手机壳和更多:Look Human
2019/01/07 全球购物
美术专业学生个人自我评价
2013/09/19 职场文书
银行简历自我评价
2014/02/11 职场文书
师德师风事迹材料
2014/12/20 职场文书
Python list列表删除元素的4种方法
2021/11/01 Python