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 基础学习笔记
May 29 Javascript
javascript 获取表单file全路径
Dec 31 Javascript
引用外部js乱码问题分析及解决方案
Apr 12 Javascript
js阻止冒泡及jquery阻止事件冒泡示例介绍
Nov 19 Javascript
第五章之BootStrap 栅格系统
Apr 25 Javascript
jQuery select自动选中功能实现方法分析
Nov 28 Javascript
微信小程序开发图片拖拽实例详解
May 05 Javascript
Vue代码分割懒加载的实现方法
Nov 23 Javascript
Ionic学习日记实现验证码倒计时
Feb 08 Javascript
JS实现的简单tab切换功能完整示例
Jun 20 Javascript
关于AngularJS中几种Providers的区别总结
May 17 Javascript
JS判断数组是否包含某元素实现方法汇总
Jun 24 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学习笔记之二 php入门知识
2011/01/12 PHP
apache mysql php 源码编译使用方法
2012/05/03 PHP
php除数取整示例
2014/04/24 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
2014/06/13 PHP
PHP SESSION的增加、删除、修改、查看操作
2015/03/20 PHP
PHP数组与对象之间使用递归实现转换的方法
2015/06/24 PHP
php项目中百度 UEditor 简单安装调试和调用
2015/07/15 PHP
PHP中Http协议post请求参数
2015/11/02 PHP
php版微信小店调用api示例代码
2016/11/12 PHP
js实现简单鼠标跟随效果的方法
2015/04/10 Javascript
JQuery球队选择实例
2015/05/18 Javascript
asp知识整理笔记3(问答模式)
2015/09/27 Javascript
基于javascript实现简单计算器功能
2016/01/03 Javascript
jquery对象访问是什么及使用方法介绍
2016/05/03 Javascript
vue.js中$watch的用法示例
2016/10/04 Javascript
Angular移动端页面input无法输入的解决方法
2017/11/14 Javascript
vue-video-player 通过自定义按钮组件实现全屏切换效果【推荐】
2018/08/29 Javascript
Electron 调用命令行(cmd)
2019/09/23 Javascript
Echarts.js无法引入问题解决方案
2020/10/30 Javascript
Python设计实现的计算器功能完整实例
2017/08/18 Python
python 实现读取一个excel多个sheet表并合并的方法
2019/02/12 Python
Python3中_(下划线)和__(双下划线)的用途和区别
2019/04/26 Python
Python实现的对一个数进行因式分解操作示例
2019/06/27 Python
python实现字符串完美拆分split()的方法
2019/07/16 Python
tensorflow下的图片标准化函数per_image_standardization用法
2020/06/30 Python
Python3爬虫关于代理池的维护详解
2020/07/30 Python
python 多线程中join()的作用
2020/10/29 Python
Python命令行参数argv和argparse该如何使用
2021/02/08 Python
挪威手表购物网站:Klokker
2016/09/19 全球购物
LACOSTE波兰官网:Polo衫、服装和鞋类
2020/09/29 全球购物
电子商务专业学生的学习自我评价
2013/10/27 职场文书
力学专业毕业生自荐信
2013/11/17 职场文书
租房协议书范本
2014/04/09 职场文书
环保建议书500字
2014/05/14 职场文书
python通过函数名调用函数的几种方法总结
2021/06/07 Python
PostgreSQL数据库去除重复数据和运算符的基本查询操作
2022/04/12 PostgreSQL