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中变量相关的细节分析
Aug 13 Javascript
JavaScript中的Window窗口对象
Jan 16 Javascript
javascript检测页面是否缩放的小例子
May 16 Javascript
网页广告中JS代码的信息监听示例
Apr 02 Javascript
js实现弹出窗口、页面变成灰色并不可操作的例子分享
May 10 Javascript
seaJs的模块定义和模块加载浅析
Jun 06 Javascript
jQuery判断对象是否存在的方法
Feb 05 Javascript
Bootstrap树形菜单插件TreeView.js使用方法详解
Nov 01 Javascript
简单实现AngularJS轮播图效果
Apr 10 Javascript
angular.js4使用 RxJS 处理多个 Http 请求
Sep 23 Javascript
解决select2在bootstrap modal中不能正常使用的问题
Aug 09 Javascript
vue form check 表单验证的实现代码
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
支持oicq头像的留言簿(二)
2006/10/09 PHP
中篇:安装及配置PHP
2006/12/13 PHP
收藏的一个php小偷的核心程序
2007/04/09 PHP
php使用fsockopen函数发送post,get请求获取网页内容的方法
2014/11/15 PHP
PHP实现获取第一个中文首字母并进行排序的方法
2017/05/09 PHP
关于Curl在Swoole协程中的解决方案详析
2019/09/12 PHP
用JavaScript显示随机图像或引用
2009/04/21 Javascript
jquery实现最简单的滑动菜单效果代码
2015/09/12 Javascript
Javascript实现页面滚动时导航智能定位
2017/05/06 Javascript
JavaScript 巧学巧用
2017/05/23 Javascript
React-router中结合webpack实现按需加载实例
2017/05/25 Javascript
jQuery实现的上传图片本地预览效果简单示例
2018/03/29 jQuery
vue-better-scroll 的使用实例代码详解
2018/12/03 Javascript
layer弹出框确定前验证:弹出消息框的方法(弹出两个layer)
2019/09/21 Javascript
Layer+Echarts构建弹出层折线图的方法
2019/09/25 Javascript
Python getopt模块处理命令行选项实例
2014/05/13 Python
python3实现全角和半角字符转换的方法示例
2017/09/21 Python
python如何重载模块实例解析
2018/01/25 Python
tensorflow建立一个简单的神经网络的方法
2018/02/10 Python
python 检查文件mime类型的方法
2018/12/08 Python
Django处理Ajax发送的Get请求代码详解
2019/07/29 Python
Python any()函数的使用方法
2019/10/28 Python
tensorflow-gpu安装的常见问题及解决方案
2020/01/20 Python
解决使用python print打印函数返回值多一个None的问题
2020/04/09 Python
Farfetch阿联酋:奢侈品牌时尚购物平台
2019/07/26 全球购物
为什么Runtime.exec(“ls”)没有任何输出?
2014/10/03 面试题
高中生毕业自我鉴定范文
2013/12/22 职场文书
安全生产检查通报
2014/01/29 职场文书
中学生差生评语
2014/01/30 职场文书
小学校长先进事迹材料
2014/05/13 职场文书
俞敏洪北大演讲稿
2014/05/22 职场文书
顶岗实习协议书
2015/01/29 职场文书
革命电影观后感
2015/06/18 职场文书
培训后的感想
2015/08/07 职场文书
《正面管教》读后有感:和善而坚定的旅程
2019/12/19 职场文书
php 原生分页
2021/04/01 PHP