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 相关文章推荐
利用js实现选项卡的特别效果的实例
Mar 03 Javascript
JS禁用浏览器退格键实现思路及代码
Oct 29 Javascript
jquery 无限级下拉菜单的简单实现代码
Feb 21 Javascript
鼠标拖拽移动子窗体的JS实现
Feb 25 Javascript
使用jQuery判断IE浏览器版本的代码
Jun 14 Javascript
自定义Angular指令与jQuery实现的Bootstrap风格数据双向绑定的单选与多选下拉框
Dec 12 Javascript
HTML页面定时跳转方法解析(2种任选)
Dec 22 Javascript
JavaScript实现无穷滚动加载数据
May 06 Javascript
jQuery 实现左右两侧菜单添加、移除功能
Jan 02 jQuery
vue.js实现会动的简历(包含底部导航功能,编辑功能)
Apr 08 Javascript
Vue使用Clipboard.JS在h5页面中复制内容实例详解
Sep 03 Javascript
video.js添加自定义组件的方法
Dec 09 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
东芝TOSHIBA RP-F11电路分析
2021/03/02 无线电
Syphon 虹吸式咖啡壶冲煮–拨动法
2021/03/03 冲泡冲煮
二进制交叉权限微型php类分享
2014/02/07 PHP
YII2 实现多语言配置的方法分享
2017/01/11 PHP
动态加载iframe
2006/06/16 Javascript
checkbox 多选框 联动实现代码
2008/10/22 Javascript
javascript hashtable 修正版 下载
2010/12/30 Javascript
js获得鼠标的坐标值的方法
2013/03/13 Javascript
jQuery浏览器CSS3特写兼容实例
2015/01/19 Javascript
在AngularJS框架中处理数据建模的方式解析
2016/03/05 Javascript
原生js编写autoComplete插件
2016/04/13 Javascript
noty ? jQuery通知插件全面解析
2016/05/18 Javascript
使用Angular缓存父页面数据的方法
2017/01/03 Javascript
layer.close()关闭进度条和Iframe窗的方法
2018/08/17 Javascript
详解如何在vue项目中使用eslint+prettier格式化代码
2018/11/10 Javascript
JS基于Location实现访问Url、重定向及刷新页面的方法分析
2018/12/03 Javascript
如何自定义微信小程序tabbar上边框的颜色
2019/07/09 Javascript
layui异步加载table表中某一列数据的例子
2019/09/16 Javascript
nginx部署多个vue项目的方法示例
2020/09/06 Javascript
Vue+Vant 图片上传加显示的案例
2020/11/03 Javascript
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
2016/12/15 Python
浅谈python中的实例方法、类方法和静态方法
2017/02/17 Python
利用pandas将numpy数组导出生成excel的实例
2018/06/14 Python
python中的global关键字的使用方法
2019/08/20 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
2019/10/17 Python
Python中join()函数多种操作代码实例
2020/01/13 Python
解决python执行较大excel文件openpyxl慢问题
2020/05/15 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
HTML5+CSS3绘制锯齿状的矩形
2016/03/01 HTML / CSS
DC Shoes官网:美国滑板鞋和服饰品牌
2017/09/03 全球购物
电子商务专业学生的自我鉴定
2013/11/28 职场文书
党校培训自我鉴定
2014/02/01 职场文书
市场总经理岗位职责
2014/04/11 职场文书
2014年优秀党员材料
2014/12/18 职场文书
幼儿园万圣节活动总结
2015/05/05 职场文书
创业项目(超低成本创业项目)
2019/08/16 职场文书