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 相关文章推荐
js 对联广告、漂浮广告封装类(IE,FF,Opera,Safari,Chrome
Nov 26 Javascript
js 加载并解析XML字符串的代码
Dec 13 Javascript
JQuery 遮罩层实现(mask)实现代码
Jan 09 Javascript
对xmlHttp对象的理解
Jan 17 Javascript
jquery表格内容筛选实现思路及代码
Apr 16 Javascript
js焦点文字滚动效果代码分享
Aug 25 Javascript
ionic2自定义cordova插件开发以及使用(Android)
Jun 19 Javascript
React 组件转 Vue 组件的命令写法
Feb 28 Javascript
Vue使用watch监听一个对象中的属性的实现方法
May 10 Javascript
js console.log打印对象时属性缺失的解决方法
May 23 Javascript
vue.js 输入框输入值自动过滤特殊字符替换中问标点操作
Aug 31 Javascript
JavaScript实现轮播图效果
Oct 30 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中3种方法统计字符串中每种字符的个数并排序
2012/08/27 PHP
在你的网页中嵌入外部网页的方法
2007/04/02 Javascript
用jscript实现新建word文档
2007/06/15 Javascript
键盘 keycode的值 javascript时触发事件时很有用的要素
2009/11/02 Javascript
extjs之去除s.gif的影响
2010/12/25 Javascript
浅谈javascript中的作用域
2012/04/07 Javascript
web开发人员学习jQuery的6大理由及jQuery的优势介绍
2013/01/03 Javascript
通过js获取div的background-image属性
2013/10/15 Javascript
js判断url是否有效的两种方法
2014/03/04 Javascript
JavaScript实现twitter puddles算法实例
2014/12/06 Javascript
js获取checkbox值的方法
2015/01/28 Javascript
jQuery实现Email邮箱地址自动补全功能代码
2015/11/03 Javascript
jQuery+css实现的换页标签栏效果
2016/01/27 Javascript
jQuery中使用animate自定义动画的方法
2016/05/29 Javascript
JavaScript中windows.open()、windows.close()方法详解
2016/07/28 Javascript
Angular 4.x 路由快速入门学习
2017/05/03 Javascript
详解JS实现系统登录页的登录和验证
2019/04/29 Javascript
node运行js获得输出的三种方式示例详解
2020/07/02 Javascript
使用vue编写h5公众号跳转小程序的实现代码
2020/11/27 Vue.js
[51:39]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第二场 2月7日
2021/03/11 DOTA
深入分析在Python模块顶层运行的代码引起的一个Bug
2014/07/04 Python
python学生管理系统
2019/01/30 Python
python3.6、opencv安装环境搭建过程(图文教程)
2019/11/05 Python
python 实现汉诺塔游戏
2020/11/28 Python
用CSS3打造HTML5的Logo(实现代码)
2016/06/16 HTML / CSS
YesStyle美国/全球:购买亚洲时装、美容化妆品和生活百货
2017/01/16 全球购物
洛杉矶健身中心女性专用运动服饰品牌:Marika
2018/05/09 全球购物
元旦促销方案
2014/03/15 职场文书
乡村卫生服务一体化管理实施方案
2014/03/30 职场文书
乔布斯斯坦福大学演讲稿
2014/05/23 职场文书
公司内部升职自荐信
2015/03/27 职场文书
学校捐书倡议书
2015/04/27 职场文书
大学生读书笔记范文
2015/07/01 职场文书
Winsows11性能如何? win11性能测评多核竟比Win10差了10%
2021/11/21 数码科技
Python Matplotlib绘制两个Y轴图像
2022/04/13 Python
浅谈Node的内存泄露问题
2022/05/06 NodeJs