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 相关文章推荐
js函数的延迟加载实现代码
Oct 11 Javascript
jquery中的常用事件bind、hover、toggle等示例介绍
Jul 21 Javascript
jquery文档操作wrap()方法实例简述
Jan 10 Javascript
理解AngularJs指令
Dec 10 Javascript
js控制文本框禁止输入特殊字符详解
Apr 07 Javascript
js实现会跳动的日历效果(完整实例)
Oct 18 Javascript
webpack打包react项目的实现方法
Jun 21 Javascript
解决vue接口数据赋值给data没有反应的问题
Aug 27 Javascript
vue router 源码概览案例分析
Oct 09 Javascript
JS中的一些常用的函数式编程术语
Jun 15 Javascript
js实现无缝滚动双图切换效果
Jul 09 Javascript
vue data引入本地图片的两种方式小结
Nov 13 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
php中对2个数组相加的函数
2011/06/24 PHP
PHP随机生成信用卡卡号的方法
2015/03/23 PHP
ThinkPHP开发框架函数详解:C方法
2015/08/14 PHP
Symfony2实现从数据库获取数据的方法小结
2016/03/18 PHP
php实现图片以base64显示的方法
2016/10/13 PHP
php 时间time与日期date之间的使用详解及区别
2016/11/07 PHP
php合并数组并保留键值的实现方法
2018/03/12 PHP
javascript 处理HTML元素必须避免使用的一种方法
2009/07/30 Javascript
一个用javascript写的select支持上下键、首字母筛选以及回车取值的功能
2009/09/09 Javascript
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
2013/01/02 Javascript
跟我学习javascript的浮点数精度
2015/11/16 Javascript
this,this,再次讨论javascript中的this,超全面(经典)
2016/01/05 Javascript
jQuery自定义数值抽奖活动代码
2016/06/11 Javascript
JS实现title标题栏文字不间断滚动显示效果
2016/09/07 Javascript
Javascript 事件冒泡机制详细介绍
2016/10/10 Javascript
微信小程序 教程之列表渲染
2016/10/18 Javascript
layui实现多图片上传并限制上传的图片数量
2019/09/26 Javascript
js实现文章目录索引导航(table of content)
2020/05/10 Javascript
Vue使用自定义指令实现拖拽行为实例分析
2020/06/06 Javascript
python中urllib模块用法实例详解
2014/11/19 Python
使用python生成目录树
2018/03/29 Python
Python3.7中安装openCV库的方法
2018/07/11 Python
Python/ArcPy遍历指定目录中的MDB文件方法
2018/10/27 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
2019/08/05 Python
Python  Django 母版和继承解析
2019/08/09 Python
matplotlib相关系统目录获取方式小结
2021/02/03 Python
python 实现IP子网计算
2021/02/18 Python
我能否用void** 指针作为参数, 使函数按引用接受一般指针
2013/02/16 面试题
食品营养与检测应届生求职信
2013/11/08 职场文书
怎样客观的做好自我评价
2013/12/28 职场文书
给物业的表扬信
2014/01/21 职场文书
新书吧创业计划书
2014/01/31 职场文书
班子个人四风问题整改措施
2014/10/04 职场文书
活着观后感
2015/06/03 职场文书
先进个人事迹材料(2016推荐版)
2016/03/01 职场文书
如何用 Python 子进程关闭 Excel 自动化中的弹窗
2021/05/07 Python