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中的事件处理
Jan 16 Javascript
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
Aug 14 Javascript
Jquery绑定事件(bind和live的区别介绍)
Aug 23 Javascript
js函数模拟显示桌面.scf程序示例
Apr 20 Javascript
理解Javascript的动态语言特性
Jun 17 Javascript
浅析vue深复制
Jan 29 Javascript
vue2.0组件之间传值、通信的多种方式(干货)
Feb 10 Javascript
Jquery的Ajax技术使用方法
Jan 21 jQuery
layui select 禁止点击的实现方法
Sep 05 Javascript
vue项目实现图片上传功能
Dec 23 Javascript
解决vue项目中某一页面不想引用公共组件app.vue的问题
Aug 14 Javascript
如何区分vue中的v-show 与 v-if
Sep 08 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隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
2011/11/02 PHP
PHP区块查询实现方法分析
2018/05/12 PHP
php工具型代码之印章抠图
2018/07/18 PHP
js汉字排序问题 支持中英文混排,兼容各浏览器,包括CHROME
2011/12/20 Javascript
Javascript实现的常用算法(如冒泡、快速、鸽巢、奇偶等)
2014/04/29 Javascript
js中hash和ico的关联分析
2015/02/05 Javascript
javascript实现 百度翻译 可折叠的分享按钮列表
2015/03/12 Javascript
介绍JavaScript中Math.abs()方法的使用
2015/06/14 Javascript
JavaScript中判断两个字符串是否相等的方法
2015/07/07 Javascript
javascript密码强度校验代码(两种方法)
2015/08/10 Javascript
轻松实现javascript图片轮播特效
2016/01/13 Javascript
AngularJS内建服务$location及其功能详解
2016/07/01 Javascript
JavaScript用构造函数如何获取变量的类型名
2016/12/23 Javascript
使用vux实现上拉刷新功能遇到的坑
2018/02/08 Javascript
Node.js Koa2使用JWT进行鉴权的方法示例
2018/08/17 Javascript
解决vue做详情页跳转的时候使用created方法 数据不会更新问题
2020/07/24 Javascript
vue同个按钮控制展开和折叠同个事件操作
2020/07/29 Javascript
探索Python3.4中新引入的asyncio模块
2015/04/08 Python
深入理解python对json的操作总结
2017/01/05 Python
对numpy的array和python中自带的list之间相互转化详解
2018/04/13 Python
python 实现判断ip连通性的方法总结
2018/04/22 Python
Python面向对象程序设计类的多态用法详解
2019/04/12 Python
Python 保持登录状态进行接口测试的方法示例
2019/08/06 Python
Python 函数绘图及函数图像微分与积分
2019/11/20 Python
Python更换pip源方法过程解析
2020/05/19 Python
解决python运行启动报错问题
2020/06/01 Python
如何导出python安装的所有模块名称和版本号到文件中
2020/06/05 Python
Python更改pip镜像源的方法示例
2020/12/01 Python
Python jieba库分词模式实例用法
2021/01/13 Python
XD健身器材:Kevlar球、Crossfit健身球
2019/03/26 全球购物
工商管理系学生的自我评价分享
2013/11/29 职场文书
个人培训自我鉴定
2014/03/28 职场文书
职业生涯规划书结束语
2014/04/15 职场文书
机关作风整顿个人剖析材料
2014/10/06 职场文书
老干部工作汇报材料
2014/10/28 职场文书
Win11 PC上的Outlook搜索错误怎么办?
2022/07/15 数码科技