Javascript变量作用域详解


Posted in Javascript onDecember 06, 2013

变量的作用域指的是变量的可见性,而生命周期则(存活期)则是从另一个角度考察变量。

JS中变量的作用域分为全局变量和局部变量,函数内定义的称为局部变量,函数外的称为全局变量。(“函数外的称为全局变量”是相对的,另此处讨论的前提是用var显式声明的变量,函数内不用var定义的变量默认是全局变量,当然忽略var声明变量是不赞成的)。

var glob = 4;//函数外声明全局变量 
function fun() { 
    var height = 20; //函数内用var声明的是局部变量 
    weight = 50; //函数内不用var声明的是全局变量 
} 
fun(); 
alert(weight);

JS中没有块级作用域,即用大括号{}包含的。Java中则有。在main方法中写入下代码
public static void main(String... args) { 
for(int i=0;i<5;i++) { 

} 
    { 
        int j=10; 
    } 
    int z = 20; 
    System.out.println(i); // i不可见,语法分析时报错,即编译不通过 
    System.out.println(j); // j不可见,语法分析时报错,即编译不通过 
    System.out.println(z); // z可见,输出20 
}

但如果在JS中
for(var i=0;i<5;i++) { 
} 
var obj = {name:"Lily"}; 
for(var attr in obj) { 
} 
{ 
  var j=10; 
} 
alert(i);//输出4,没有块级作用域 
alert(attr); //输出name,没有块级作用域 
alert(j);//输出10,没有块级作用域

这也说明一个问题,避免在全局范围内使用for循环同时声明变量,否则会造成全局命名范围的污染。

当然,JS1.7中提出了let关键字声明变量(见https://developer.mozilla.org/cn/New_in_JavaScript_1.7),只作用于for语句范围。

for(let i=0;i<5;i++) { 
   //todo 
} 
alert(i);//运行时报错,提示i未定义

JS1.7需要这样引用 <script type="application/javascript;version=1.7"/></script>

ps:firefox2+实现了JS1.7

Javascript 相关文章推荐
for 循环性能比较 提高for循环的效率
Mar 19 Javascript
犀利的js 函数集合
Jun 11 Javascript
Chrome Form多次提交表单问题的解决方法
May 09 Javascript
基于jQuery实现左右div自适应高度完全相同的代码
Aug 09 Javascript
javascript实现的HashMap类代码
Jun 27 Javascript
js实现单击图片放大图片的方法
Feb 17 Javascript
jQuery对checkbox 复选框的全选全不选反选的操作
Aug 09 Javascript
PHP7新特性简述
Jun 11 Javascript
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
Dec 26 Javascript
vue 路由页面之间实现用手指进行滑动的方法
Feb 23 Javascript
angular 内存溢出的问题解决
Jul 12 Javascript
vue 中固定导航栏的实例代码
Nov 01 Javascript
JavaScript1.6数组新特性介绍以及JQuery的几个工具方法
Dec 06 #Javascript
Javascript中克隆一个数组的实现代码
Dec 06 #Javascript
浅析JavaScript中的同名标识符优先级
Dec 06 #Javascript
如何判断元素是否为HTMLElement元素
Dec 06 #Javascript
随鼠标上下滚动的jquery代码
Dec 05 #Javascript
js简单实现删除记录时的提示效果
Dec 05 #Javascript
Jquery 切换不同图片示例代码
Dec 05 #Javascript
You might like
Ha0k 0.3 PHP 网页木马修改版
2009/10/11 PHP
采用header定义为文件然后readfile下载(隐藏下载地址)
2014/01/31 PHP
php第一次无法获取cookie问题处理
2014/12/15 PHP
php绘制圆形的方法
2015/01/24 PHP
Thinkphp3.2实用篇之计算型验证码示例
2017/02/09 PHP
了解一点js的Eval函数
2012/07/26 Javascript
jQuery Pagination Ajax分页插件(分页切换时无刷新与延迟)中文翻译版
2013/01/11 Javascript
指定区域的图片自动按比例缩小的js代码(防止页面被图片撑破)
2014/02/21 Javascript
jquery操作checkbox实现全选和取消全选
2014/05/02 Javascript
JS实现3D图片旋转展示效果代码
2015/09/22 Javascript
jQuery实现的个性化返回底部与返回顶部特效代码
2015/10/30 Javascript
jQuery鼠标悬浮链接弹出跟随图片实例代码
2016/01/08 Javascript
老生常谈 关于JavaScript的类的继承
2016/06/24 Javascript
Vue.js计算属性computed与watch(5)
2016/12/09 Javascript
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
2017/02/16 Javascript
前端框架学习总结之Angular、React与Vue的比较详解
2017/03/14 Javascript
vue.js实现备忘录功能的方法
2017/07/10 Javascript
小程序获取周围IBeacon设备的方法
2018/10/31 Javascript
nodejs中方法和模块用法示例
2018/12/24 NodeJs
Vue路由前后端设计总结
2019/08/06 Javascript
深入了解Vue3模板编译原理
2020/11/19 Vue.js
[48:45]Ti4 循环赛第二日 NEWBEE vs EG
2014/07/11 DOTA
跟老齐学Python之折腾一下目录
2014/10/24 Python
python爬虫之BeautifulSoup 使用select方法详解
2017/10/23 Python
Python3.5字符串常用操作实例详解
2019/05/01 Python
Python列表与元组的异同详解
2019/07/02 Python
实例讲解Python 迭代器与生成器
2020/07/08 Python
python 装饰器的基本使用
2021/01/13 Python
Artist Guitars新西兰:乐器在线商店
2017/09/17 全球购物
请说出几个常用的异常类
2013/01/08 面试题
农田水利实习自我鉴定
2013/09/19 职场文书
促销活动方案模板
2014/02/24 职场文书
医院护士见习期自我鉴定
2014/04/10 职场文书
清明节网上祭英烈寄语2015
2015/03/04 职场文书
校长师德表现自我评价
2015/03/04 职场文书
2019入党申请书范文3篇
2019/08/21 职场文书