JavaScript变量声明详解


Posted in Javascript onNovember 27, 2014

定义在函数体外的都属于全局变量,定义在函数体内的属于局部变量。这里的定义是指通过var声明的。

JavaScript有隐含的全局概念,意味着你不声明的任何变量都会成为一个全局对象属性。例如:

function test(){

    myname = "huming";

    alert(myname);

}

test();// "huming"

alert(myname);
//"huming"

 两个结果是一样的,说明myname是一个全局变量。

那么,隐式全局变量和明确定义的全局变量有没有区别呢。。答案肯定是有的,看下面的例子:

// 定义三个全局变量

var global_test1 = 1;

global_test2 = 2; // 反面教材

(function () {

    global_test3 = 3; // 反面教材

}());

// 试图删除

delete global_test1; // false

delete global_test2; // true

delete global_test3; // true

// 测试该删除

alert(typeof global_test1); // "number"

alert(typeof global_test2); // "undefined"

alert(typeof global_test3); // "undefined"

 由上面的例子可以看出:在函数之外通过var定义的global_test1不能被删除,而没有经过var定义的global_test2和global_test3都被删除了(无论是否是在函数体内创建)。

总结来说,在函数体外通过var声明的全局变量不能被删除,而隐式全局变量是可以删除的。

这里要注意了:JavaScript有一种行为叫做“hoisting”(悬置/置顶解析/预解析)。

我们通过一个例子来说明:

var myname = "huming"; //声明全局变量

function test() {

    alert(myname);

    var myname = "local_huming";

    alert(myname);

}

test();

 你猜两次alert的内容一致吗??显然不一致,一致还用说吗。。实际输出是:"undefined", "local_huming"。

上面的例子等同于

var myname = "huming"; //声明全局变量

function test() {
var myname;

alert(maname);<br>
myname = "local_huming";

alert(myname);    // "local"

}

test();

第一次alert输出的myname并不是你以为的全局变量,而是和它在一个作用域(一个函数体)内的局部变量。虽然它还没有被声明,但被当作是声明了。这就是所谓的“hoisting”。

这样应该就明白了吧。当你在函数体中使用了一个变量,又在之后重新声明的话,就可能产生错误。

书写规范:

function test() {

   var a = 1,

       b = 2,

       c = a + b,

       d = {},

       e,

       f;

   // function body...

}

 

好处在于:

1、所有局部变量都定义在函数开始,方便查找;

2、防止变量在定义之前使用的逻辑错误。

小伙伴们是否了解了javascript的变量声明了呢,以上内容很详细也很易懂,最后的总结也很中肯,小伙伴们不要错过。

Javascript 相关文章推荐
poshytip 基于jquery的 插件 主要用于显示微博人的图像和鼠标提示等
Oct 12 Javascript
js Dialog 实践分享
Oct 22 Javascript
让alert不出现弹窗的两种方法
May 18 Javascript
iframe里面的元素触发父窗口元素事件的jquery代码
Oct 19 Javascript
JS实现带鼠标效果的头像及文章列表代码
Sep 27 Javascript
jquery中用jsonp实现搜索框功能
Oct 18 Javascript
JS轮播图中缓动函数的封装
Nov 25 Javascript
全新打包工具parcel零配置vue开发脚手架
Jan 11 Javascript
JavaScript获取用户所在城市及地理位置
Apr 21 Javascript
vue quill editor 使用富文本添加上传音频功能
Jan 14 Javascript
在vue中使用回调函数,this调用无效的解决
Aug 11 Javascript
JS如何监听div的resize事件详解
Dec 03 Javascript
js脚本实现数据去重
Nov 27 #Javascript
实例分析js和C#中使用正则表达式匹配a标签
Nov 26 #Javascript
javascript几个易错点记录
Nov 26 #Javascript
jquery选择器需要注意的问题
Nov 26 #Javascript
jquery操作对象数组元素方法详解
Nov 26 #Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
Nov 26 #Javascript
JavaScript定义类和对象的方法
Nov 26 #Javascript
You might like
PHPExcel内存泄漏问题解决方法
2015/01/23 PHP
wordpress之js库集合研究介绍
2007/08/17 Javascript
js获取url参数的使用扩展实例
2007/12/29 Javascript
jQuery中json对象的复制方式介绍(数组及对象)
2013/06/08 Javascript
Javascript的表单与验证-非空验证
2016/03/18 Javascript
AngularJS教程 ng-style 指令简单示例
2016/08/03 Javascript
JavaScript数据结构之二叉树的遍历算法示例
2017/04/13 Javascript
Angularjs渲染的 using 指令的星级评分系统示例
2017/11/09 Javascript
vue的一个分页组件的示例代码
2017/12/25 Javascript
JS实现Cookie读、写、删除操作工具类示例
2018/08/28 Javascript
JS与SQL方式随机生成高强度密码示例
2018/12/29 Javascript
js的Object.assign用法示例分析
2020/03/05 Javascript
[01:08]DOTA2次级职业联赛 - Shield战队宣传片
2014/12/01 DOTA
python远程登录代码
2008/04/29 Python
分享15个最受欢迎的Python开源框架
2014/07/13 Python
pycharm配置pyqt5-tools开发环境的方法步骤
2019/02/11 Python
Python操作配置文件ini的三种方法讲解
2019/02/22 Python
Python 多个图同时在不同窗口显示的实现方法
2019/07/07 Python
Python基于进程池实现多进程过程解析
2020/04/30 Python
通过实例了解Python异常处理机制底层实现
2020/07/23 Python
KIKO美国官网:意大利的平价彩妆品牌
2017/05/16 全球购物
VIVOBAREFOOT赤脚鞋:让您的脚做自然的事情
2017/06/01 全球购物
欧洲当代手工玻璃和瓷器的领先品牌:LSA International
2018/06/03 全球购物
英国最大的专业户外零售商:Mountain Warehouse
2018/06/06 全球购物
女性时尚在线:IVRose
2019/02/23 全球购物
超市促销实习自我鉴定
2013/09/23 职场文书
采购部部长岗位职责
2014/02/06 职场文书
应届中专生自荐书范文
2014/02/13 职场文书
村党支部公开承诺书
2014/05/29 职场文书
2015年元旦主持词开场白
2014/12/14 职场文书
地方课程教学计划
2015/01/19 职场文书
2015年上半年信访工作总结
2015/03/30 职场文书
关于教师节的广播稿
2015/08/19 职场文书
2016年大学生暑期社会实践方案
2015/11/26 职场文书
小公司融资,商业计划书的8切记
2019/07/15 职场文书
Redis 报错 error:NOAUTH Authentication required
2022/05/15 Redis