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 相关文章推荐
javascript基于jQuery的表格悬停变色/恢复,表格点击变色/恢复,点击行选Checkbox
Aug 05 Javascript
让GoogleCode的SVN下的HTML文件在FireFox下正常显示.
May 25 Javascript
24款非常有用的 jQuery 插件分享
Apr 06 Javascript
基于jquery的图片轮播 tab切换组件
Jul 19 Javascript
怎么清空javascript数组
May 11 Javascript
鼠标拖拽移动子窗体的JS实现
Feb 25 Javascript
基于jquery实现日历签到功能
Sep 11 Javascript
html、css和jquery相结合实现简单的进度条效果实例代码
Oct 24 Javascript
JQuery获取鼠标进入和离开容器的方向
Dec 29 Javascript
利用js实现前后台传送Json的示例代码
Mar 29 Javascript
swiper Scrollbar滚动条组件详解
Sep 08 Javascript
vue在响应头response中获取自定义headers操作
Jul 24 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+APACHE实现用户论证的方法
2006/10/09 PHP
php中$_GET与$_POST过滤sql注入的方法
2014/11/03 PHP
超详细的php用户注册页面填写信息完整实例(附源码)
2015/11/17 PHP
JS版网站风格切换实例代码
2008/10/06 Javascript
javascript 函数参数限制说明
2010/11/19 Javascript
自定义require函数让浏览器按需加载Js文件
2016/11/24 Javascript
浅谈javascript alert和confirm的美化
2016/12/15 Javascript
jQuery向webApi提交post json数据
2017/01/16 Javascript
详解js的异步编程技术的方法
2017/02/09 Javascript
input输入框内容实时监测(附代码)
2017/08/15 Javascript
浅谈js获取ModelAndView值的问题
2018/03/28 Javascript
详解Python的Django框架中的Cookie相关处理
2015/07/22 Python
举例讲解Python中的list列表数据结构用法
2016/03/12 Python
PyQt 线程类 QThread使用详解
2017/07/16 Python
python3 爬取图片的实例代码
2018/11/06 Python
python根据url地址下载小文件的实例
2018/12/18 Python
PyQt5 加载图片和文本文件的实例
2019/06/14 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
2020/01/20 Python
浅谈Pycharm最有必要改的几个默认设置项
2020/02/14 Python
Python HTMLTestRunner库安装过程解析
2020/05/25 Python
香蕉共和国Banana Republic官网:美国GAP旗下偏贵族风格服饰品牌
2016/11/21 全球购物
美国电力供应商店/电气批发商:USESI
2018/10/12 全球购物
美国折扣香水网站:The Perfume Spot
2020/12/12 全球购物
工作表扬信的范文
2014/01/10 职场文书
小学毕业寄语大全
2014/04/03 职场文书
学生会主席演讲稿
2014/04/25 职场文书
拓展策划方案
2014/06/03 职场文书
小学感恩节活动策划方案
2014/10/06 职场文书
公司离职证明标准格式
2014/11/18 职场文书
2015元旦家电促销活动策划方案
2014/12/09 职场文书
学校百日安全活动总结
2015/05/07 职场文书
行政答辩状范文
2015/05/21 职场文书
大学生志愿者心得体会
2016/01/15 职场文书
Python Django ORM连表正反操作技巧
2021/06/13 Python
Pillow图像处理库安装及使用
2022/04/12 Python
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技