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图片滚动与幻灯片的实例代码
Apr 08 Javascript
JavaScript常用脚本汇总(二)
Mar 04 Javascript
jQuery入门基础知识学习指南
Aug 14 Javascript
JS实现具备延时功能的滑动门菜单效果
Sep 17 Javascript
JavaScript数组去重的几种方法效率测试
Oct 23 Javascript
JavaScript队列、优先队列与循环队列
Nov 14 Javascript
jquery.guide.js新版上线操作向导镂空提示jQuery插件(推荐)
May 20 jQuery
vue中keep-alive的用法及问题描述
May 15 Javascript
Windows下支持自动更新的Electron应用脚手架的方法
Dec 24 Javascript
jQuery实现适用于移动端的跑马灯抽奖特效示例
Jan 18 jQuery
JavaScript实现点击图片换背景
Nov 20 Javascript
微信小程序APP页面的之间的相互传递参数以及自定义组件
Apr 19 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
PHP计划任务之关闭浏览器后仍然继续执行的函数
2010/07/22 PHP
php设计模式 Interpreter(解释器模式)
2011/06/26 PHP
js onkeypress与onkeydown 事件区别详细说明
2012/12/13 Javascript
Bootstrap轮播加上css3动画,炫酷到底!
2015/12/22 Javascript
使用堆实现Top K算法(JS实现)
2015/12/25 Javascript
js实现的光标位置工具函数示例
2016/10/03 Javascript
详解JavaScript的内置对象
2016/12/07 Javascript
JavaScript中for循环的几种写法与效率总结
2017/02/03 Javascript
解决Angular4项目部署到服务器上刷新404的问题
2018/08/31 Javascript
JavaScript中的各种宽高属性的实现
2020/05/08 Javascript
使用原生JS实现滚轮翻页效果的示例代码
2020/05/31 Javascript
Vue+Openlayers自定义轨迹动画
2020/09/24 Javascript
python实现ip查询示例
2014/03/26 Python
纯Python开发的nosql数据库CodernityDB介绍和使用实例
2014/10/23 Python
python编程之requests在网络请求中添加cookies参数方法详解
2017/10/25 Python
Python实现的银行系统模拟程序完整案例
2019/04/12 Python
Django中间件拦截未登录url实例详解
2019/09/03 Python
解决pycharm启动后总是不停的updating indices...indexing的问题
2019/11/27 Python
Python进程Multiprocessing模块原理解析
2020/02/28 Python
python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例
2020/03/01 Python
python+gdal+遥感图像拼接(mosaic)的实例
2020/03/10 Python
Python3 selenium 实现QQ群接龙自动化功能
2020/04/17 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
2020/05/27 Python
Python基于正则表达式实现计算器功能
2020/07/13 Python
Python基于xlutils修改表格内容过程解析
2020/07/28 Python
英国电器零售商:PRC Direct
2018/06/21 全球购物
Sneaker Studio捷克:购买运动鞋
2018/07/08 全球购物
mysql_pconnect()和mysql_connect()有什么区别
2012/05/25 面试题
临床医学专业个人的自我评价
2013/09/27 职场文书
采购文员岗位职责
2013/11/20 职场文书
教师纪念9.18事件演讲稿范文
2014/09/14 职场文书
2014年银行年终工作总结
2014/12/19 职场文书
部门优秀员工推荐信
2015/03/24 职场文书
实习证明模板
2015/06/16 职场文书
文明上网主题班会
2015/08/14 职场文书
python模拟浏览器 使用selenium进入好友QQ空间并留言
2022/04/12 Python