JavaScript 变量作用域分析


Posted in Javascript onJuly 04, 2011
/* 代码1 */ 
var scope = "global "; 
function checkScope() { 
var scope = "local "; 
function childCheck() { 
var scope = "childLocal "; 
document.write(scope); 
} 
function childUndefined() { 
document.write(scope); 
var scope; 
} 
function childOverride() { 
scope = "childOverride "; 
document.write(scope); 
} 
document.write(scope); //输出"local" 
childCheck(); //输出"childLocal" 
childUndefined(); //输出"undefined" 
childOverride(); //输出"childOverride" 
document.write(scope); //输出"childOverride" 
} 
checkScope(); //输出"local childLocal undefinedchildOverride childOverride" 
document.write(scope); //输出"global "

全局作用域与局部作用域
全局(global)变量的作用域是全局的,在Javascript中处处有定义;而函数内部声明的变量是局部(local)变量,其作用域是局部性的,只在函数体内部有定义。对于下面的输出读者应不会感到意外。
/* 代码2 */ 
var scope = "global"; 
function checkScope() { 
var scope = "local"; 
document.write(scope); 
} 
checkScope(); //输出"local" 
document.write(scope); //输出"global"

全局变量作用域中使用变量可以不用var语句,但在声明局部变量是一定要使用var语句,否则会视为对全局变量的引用。看下面代码:
/* 代码3 */ 
var scope = "global"; 
function checkScope() { 
scope = "local"; 
document.write(scope); 
} 
checkScope(); //输出"local" 
document.write(scope); //输出"local"

没有块作用域
Javascript没有块级作用域,函数中声明的变量在整个函数中都是有定义的。对于下面的代码对于生疏的读者可能颇感意外:
/* 代码4 */ 
var scope = "global"; 
function checkScope() { 
document.write(scope); //语句4.1 
var scope = "local"; //语句4.2 
document.write(scope); 
} 
checkScope(); //输出"undefinedlocal"

由于语句4.1(var scope = "local";)声明的变量在整个checkScope函数作用域内都有效,因此在语句4.2(document.write(scope); )执行的时scope引用的是局部变量,而此时局部变量scope尚未定义,所以输出”undefined”。因此一个好的编程习惯是将所有的变量声明集中起来放在函数的开头。

在了解了上述内容之后,读者再看看代码1应该不会感到困惑了。

对象的属性变量
对象的属性变量比较容易理解,看一下下面的代码读者应该不会感到疑惑。

/* 代码5 */ 
var scope = "global "; 
var obj = new Object(); 
obj.scope = "object "; 
obj.checkScope = function () { 
var scope = "loacl "; 
document.write(scope); //输出"loacl" 
document.write(this.scope); //输出"object" 
document.write(window.scope); //输出"global" 
} 
obj.checkScope(); //输出"loacl object global"
Javascript 相关文章推荐
jquery动态改变form属性提交表单
Jun 03 Javascript
iframe如何动态创建及释放其所占内存
Sep 03 Javascript
AngularJS directive返回对象属性详解
Mar 28 Javascript
全屏js头像上传插件源码高清版
Mar 29 Javascript
Vue.js 2.0窥探之Virtual DOM到底是什么?
Feb 10 Javascript
原生JS实现移动端web轮播图详解(结合Tween算法造轮子)
Sep 10 Javascript
运用js实现图层拖拽的功能
May 24 Javascript
JavaScript动态添加数据到表单并提交的几种方式
Jun 26 Javascript
vue遍历生成的输入框 绑定及修改值示例
Oct 30 Javascript
Vue 实现分页与输入框关键字筛选功能
Jan 02 Javascript
vue实现购物车的小练习
Dec 21 Vue.js
使用webpack和rollup打包组件库的方法
Feb 25 Javascript
JavaScript XML和string相互转化实现代码
Jul 04 #Javascript
JS对外部文件的加载及对IFRMAME的加载的实现,当加载完成后,指定指向方法(方法回调)
Jul 04 #Javascript
jQuery 对Select的操作备忘记录
Jul 04 #Javascript
javascript开发技术大全 第4章 直接量与字符集
Jul 03 #Javascript
javascript开发技术大全-第3章 js数据类型
Jul 03 #Javascript
javascript开发技术大全-第1章javascript概述
Jul 03 #Javascript
js 字符串转化成数字的代码
Jun 29 #Javascript
You might like
php检测mysql表是否存在的方法小结
2017/07/20 PHP
PHP队列场景以及实现代码实例详解
2021/02/26 PHP
设置下载不需要倒计时cookie(倒计时代码)
2008/11/19 Javascript
jQuery学习笔记之Helloworld
2010/12/22 Javascript
基于KMP算法JavaScript的实现方法分析
2013/05/03 Javascript
jQuery拖动图片删除示例
2013/05/10 Javascript
解析JavaScript中的标签语句
2013/06/19 Javascript
浅析offsetLeft,Left,clientLeft之间的区别
2013/11/30 Javascript
解析JavaScript中的不可见数据类型
2013/12/02 Javascript
一种Javascript解释ajax返回的json的好方法(推荐)
2016/06/02 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
2016/08/03 Javascript
jQuery实现表格冻结顶栏效果
2017/08/20 jQuery
解决Vue 浏览器后退无法触发beforeRouteLeave的问题
2017/12/24 Javascript
Angular实现的简单查询天气预报功能示例
2017/12/27 Javascript
Vue项目中跨域问题解决方案
2018/06/05 Javascript
vue实现表单未编辑或未保存离开弹窗提示功能
2020/04/08 Javascript
Linux下使用python自动修改本机网关代码分享
2015/05/21 Python
python 捕获 shell/bash 脚本的输出结果实例
2017/01/04 Python
Python爬取网易云音乐上评论火爆的歌曲
2017/01/19 Python
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
2017/08/08 Python
python字典操作实例详解
2017/11/16 Python
python3+PyQt5实现文档打印功能
2018/04/24 Python
浅谈python的输入输出,注释,基本数据类型
2019/04/02 Python
使用Python为中秋节绘制一块美味的月饼
2019/09/11 Python
python模块和包的应用BASE_PATH使用解析
2019/12/14 Python
python颜色随机生成器的实例代码
2020/01/10 Python
浅谈Python3实现两个矩形的交并比(IoU)
2020/01/18 Python
Python object类中的特殊方法代码讲解
2020/03/06 Python
matplotlib 画双轴子图无法显示x轴的解决方法
2020/07/27 Python
英国知名化妆品网站:Revolution Beauty(原TAM Beauty)
2018/02/28 全球购物
课前三分钟演讲稿
2014/04/24 职场文书
股指期货心得体会
2014/09/10 职场文书
优秀团员自我评价
2015/03/10 职场文书
2015年体检中心工作总结
2015/05/27 职场文书
旅游投诉信范文
2015/07/02 职场文书
Python图像处理之图像拼接
2021/04/28 Python