浅析JavaScript声明变量


Posted in Javascript onDecember 21, 2015

JavaScript的变量声明语句无论出现在何处,都会先于其他代码首先被执行。使用var关键词声明变量的作用域是当前的执行上下文,有可能是外围函数,或者,当变量声明在函数体之外时,则为全局变量。

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

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

function test(){
myname = "huming";
alert(myname);
}
test();// "huming"
alert(myname);
//"huming"

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

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

// 定义三个全局变量
var global_test = ;
global_test = ; // 反面教材
(function () {
global_test = ; // 反面教材
}());
// 试图删除
delete global_test; // false
delete global_test; // true
delete global_test; // true
// 测试该删除
alert(typeof global_test); // "number"
alert(typeof global_test); // "undefined"
alert(typeof global_test); // "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 = ,
b = ,
c = a + b,
d = {},
e,
f;
// function body...
}

好处在于:

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

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

在javascript中,一个变量名(name)有四种方式进入作用域(scope)中

语言内置,所有的作用域中都有this和arguments关键字

形式参数,函数的参数在整个作用域中都是有效的

函数声明

变量声明

上面列出的四种顺序也正是由高到底的优先级的顺序,一旦一个变量名已经声明了,那么它就不可能被其他更低优先级的变量声明形式所覆盖。

Javascript 相关文章推荐
浏览器加载、渲染和解析过程黑箱简析
Nov 29 Javascript
jquery默认校验规则整理
Mar 24 Javascript
jquery让指定的元素闪烁显示的方法
Mar 17 Javascript
ECMAScript6函数剩余参数(Rest Parameters)
Jun 12 Javascript
JS简单实现城市二级联动选择插件的方法
Aug 19 Javascript
jQuery 如何给Carousel插件添加新的功能
Apr 18 Javascript
关于数据与后端进行交流匹配(点亮星星)
Aug 03 Javascript
浅谈JavaScript 中有关时间对象的方法
Aug 15 Javascript
JavaScript  event对象整理及详细介绍
Oct 10 Javascript
Vue.js实现图片的随意拖动方法
Mar 08 Javascript
解决vue A对象赋值给B对象,修改B属性会影响到A的问题
Sep 25 Javascript
JavaScript实现栈结构Stack过程详解
Mar 07 Javascript
jQuery实现图片文字淡入淡出效果
Dec 21 #Javascript
深入浅析Node.js 事件循环
Dec 20 #Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
Dec 20 #Javascript
基于jQuery和CSS3制作响应式水平时间轴附源码下载
Dec 20 #Javascript
jQuery mobile 移动web(4)
Dec 20 #Javascript
基于jQuery实现放大镜特效
Oct 19 #Javascript
jQuery mobile 移动web(6)
Dec 20 #Javascript
You might like
php合并数组array_merge函数运算符加号与的区别
2008/10/31 PHP
用PHP+MySQL搭建聊天室功能实例代码
2012/08/20 PHP
PHP不用递归实现无限分级的例子分享
2014/04/18 PHP
php 伪静态之IIS篇
2014/06/02 PHP
smarty内置函数{loteral}、{ldelim}和{rdelim}用法实例
2015/01/22 PHP
php列出mysql表所有行和列的方法
2015/03/13 PHP
PHP+MYSQL中文乱码问题
2015/07/01 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
2016/10/12 PHP
php文件包含的几种方式总结
2019/09/19 PHP
Javascript 事件流和事件绑定
2009/07/16 Javascript
javascript 基础篇3 类,回调函数,内置对象,事件处理
2012/03/14 Javascript
最佳6款用于移动网站开发的jQuery 图片滑块插件小结
2012/07/20 Javascript
html+js实现动态显示本地时间
2013/09/21 Javascript
JavaScript中如何通过arguments对象实现对象的重载
2014/05/12 Javascript
jQuery表格排序组件-tablesorter使用示例
2014/05/26 Javascript
实现js保留小数点后N位的代码
2014/11/13 Javascript
js基本算法:冒泡排序,二分查找的简单实例
2016/10/08 Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
2016/10/31 Javascript
实例解析Array和String方法
2016/12/14 Javascript
webpack4的迁移的使用方法
2018/05/25 Javascript
Node.js的进程管理的深入理解
2019/01/09 Javascript
js实现微信聊天效果
2020/08/09 Javascript
python实现查找excel里某一列重复数据并且剔除后打印的方法
2015/05/26 Python
Python使用回溯法子集树模板解决迷宫问题示例
2017/09/01 Python
python+django加载静态网页模板解析
2017/12/12 Python
Python3.4 tkinter,PIL图片转换
2018/06/21 Python
Python sklearn KFold 生成交叉验证数据集的方法
2018/12/11 Python
Python两个字典键同值相加的几种方法
2019/03/05 Python
python异步存储数据详解
2019/03/19 Python
python判断所输入的任意一个正整数是否为素数的两种方法
2019/06/27 Python
在django中form的label和verbose name的区别说明
2020/05/20 Python
python Selenium 库的使用技巧
2020/10/16 Python
Django解决frame拒绝问题的方法
2020/12/18 Python
施华洛世奇天猫官方旗舰店:SWAROVSKI
2017/04/17 全球购物
反四风对照检查材料
2014/09/22 职场文书
2015入党自传书范文
2015/06/26 职场文书