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 相关文章推荐
利用Jquery实现可多选的下拉框
Feb 21 Javascript
JavaScript支持的最大递归调用次数分析
Jun 24 Javascript
JavaScript操作Oracle数据库示例
Mar 06 Javascript
文件上传,iframe跨域数据提交的实现
Nov 18 Javascript
基于AGS JS开发自定义贴图图层
Mar 31 Javascript
React Native预设占位placeholder的使用
Sep 28 Javascript
利用npm 安装删除模块的方法
May 15 Javascript
详解React+Koa实现服务端渲染(SSR)
May 23 Javascript
css配合JavaScript实现tab标签切换效果
Oct 11 Javascript
vue-cli 构建骨架屏的方法示例
Nov 08 Javascript
JQueryDOM之样式操作
Mar 27 jQuery
详解JavaScript中的函数、对象
Apr 01 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
《魔兽世界》惊魂幻象将获得调整
2020/03/08 其他游戏
使用无限生命期Session的方法
2006/10/09 PHP
PHP执行linux系统命令的常用函数使用说明
2010/04/27 PHP
Admin generator, filters and I18n
2011/10/06 PHP
PHP的命令行命令使用指南
2015/08/18 PHP
PHP实现的回溯算法示例
2017/08/15 PHP
初学JavaScript_03(ExtJs Grid的简单使用)
2008/10/02 Javascript
JavaScript 打地鼠游戏代码说明
2010/10/12 Javascript
模拟select的代码
2011/10/19 Javascript
JavaScript用select实现日期控件
2015/07/17 Javascript
基于jquery实现导航菜单高亮显示(两种方法)
2015/08/23 Javascript
javascript和jquery实现用户登录验证
2016/05/04 Javascript
使用开源工具制作网页验证码的方法
2016/10/17 Javascript
Vue + Vue-router 同名路由切换数据不更新的方法
2017/11/20 Javascript
p5.js入门教程和基本形状绘制
2018/03/15 Javascript
详解基于Vue cli生成的Vue项目的webpack4升级
2018/06/19 Javascript
vue使用v-for实现hover点击效果
2018/09/29 Javascript
[02:28]DOTA2亚洲邀请赛 LGD战队巡礼
2015/02/03 DOTA
[40:48]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第二局
2016/02/28 DOTA
python getopt 参数处理小示例
2009/06/09 Python
跟老齐学Python之眼花缭乱的运算符
2014/09/14 Python
Python解析xml中dom元素的方法
2015/03/12 Python
利用python实现在微信群刷屏的方法
2019/02/21 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
2019/05/16 Python
在echarts中图例legend和坐标系grid实现左右布局实例
2020/05/16 Python
基于Python爬虫采集天气网实时信息
2020/06/05 Python
python中使用.py配置文件的方法详解
2020/11/23 Python
物业经理求职自我评价
2013/09/22 职场文书
药品营销策划方案
2014/06/15 职场文书
小学五年级班主任工作经验交流材料
2015/11/02 职场文书
毕业生求职自荐信(2016最新版)
2016/01/28 职场文书
python数字转对应中文的方法总结
2021/08/02 Python
Ajax实现异步加载数据
2021/11/17 Javascript
人工智能深度学习OpenAI baselines的使用方法
2022/05/20 Python
Java结构型设计模式之组合模式详解
2022/09/23 Java/Android
使用python生成大量数据写入es数据库并查询操作(2)
2022/09/23 Python