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 相关文章推荐
javaScript 关闭浏览器 (不弹出提示框)
Jan 31 Javascript
JS前端框架关于重构的失败经验分享
Mar 17 Javascript
超炫的jquery仿flash导航栏特效
Nov 11 Javascript
js实现可折叠展开的手风琴菜单效果
Sep 07 Javascript
javaScript中的原型解析【推荐】
May 05 Javascript
基于JS实现bookstore静态页面的实例代码
Feb 22 Javascript
Vue中的slot使用插槽分发内容的方法
Mar 01 Javascript
判断js数据类型的函数实例详解
May 23 Javascript
Vue中跨域及打包部署到nginx跨域设置方法
Aug 26 Javascript
Nuxt.js实现一个SSR的前端博客的示例代码
Sep 06 Javascript
vue中移动端调取本地的复制的文本方式
Jul 18 Javascript
微信小程序实现点赞业务
Feb 10 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分页函数
2006/10/09 PHP
PHP4实际应用经验篇(2)
2006/10/09 PHP
PHP中文URL编解码(urlencode()rawurlencode()
2010/07/03 PHP
php实现zip文件解压操作
2015/11/03 PHP
php批量转换文件夹下所有文件编码的函数类
2017/08/06 PHP
Swoole 5将移除自动添加Event::wait()特性详解
2019/07/10 PHP
JS仿flash上传头像效果实现代码
2011/07/18 Javascript
DOM 中的事件处理介绍
2012/01/18 Javascript
javascript随机之洗牌算法深入分析
2014/06/07 Javascript
express的中间件basicAuth详解
2014/12/04 Javascript
node.js中的fs.writeSync方法使用说明
2014/12/15 Javascript
jQuery监听文件上传实现进度条效果的方法
2016/10/16 Javascript
JS 实现banner图片轮播效果(鼠标事件)
2017/08/04 Javascript
浅谈Node异步编程的机制
2017/10/18 Javascript
浅谈React前后端同构防止重复渲染
2018/01/05 Javascript
基于node搭建服务器,写接口,调接口,跨域的实例
2018/05/13 Javascript
微信小程序实现日历效果
2018/12/28 Javascript
独立部署小程序基于nodejs的服务器过程详解
2019/06/24 NodeJs
node.js express框架简介与实现
2019/07/23 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
2019/10/23 jQuery
Angular如何由模板生成DOM树的方法
2019/12/23 Javascript
JS如何判断对象是否包含某个属性
2020/08/29 Javascript
原生js实现表格翻页和跳转
2020/09/29 Javascript
python通过scapy获取局域网所有主机mac地址示例
2014/05/04 Python
Python 爬虫的工具列表大全
2016/01/31 Python
纯python实现机器学习之kNN算法示例
2018/03/01 Python
Python闭包函数定义与用法分析
2018/07/20 Python
opencv-python 提取sift特征并匹配的实例
2019/12/09 Python
python3 动态模块导入与全局变量使用实例
2019/12/22 Python
python文件处理fileinput使用方法详解
2020/01/02 Python
CSS3模块的目前的状况分析
2010/02/24 HTML / CSS
简历中的自我评价范文
2014/02/05 职场文书
2014年司法所工作总结
2014/11/22 职场文书
党员转正申请报告
2015/05/15 职场文书
爱国主义教育基地观后感
2015/06/18 职场文书
如何解决php-fpm启动不了问题
2021/11/17 PHP