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所必须要知道的一些
Mar 07 Javascript
利用404错误页面实现UrlRewrite的实现代码
Aug 20 Javascript
比较不错的JS/JQuery显示或隐藏文本的方法
Feb 13 Javascript
JS函数重载的解决方案
May 13 Javascript
JS小游戏之仙剑翻牌源码详解
Sep 25 Javascript
JavaScript数组方法大全(推荐)
Jul 05 Javascript
在一个页面重复使用一个js函数的方法详解
Dec 26 Javascript
JavaScript DOM节点操作实例小结(新建,删除HTML元素)
Jan 19 Javascript
webpack2.0搭建前端项目的教程详解
Apr 05 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
Jul 19 Javascript
微信小程序纯文本实现@功能
Apr 08 Javascript
vue项目启动出现cannot GET /服务错误的解决方法
Apr 26 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中选择什么接口(mysql、mysqli)访问mysql
2013/02/06 PHP
php事务处理实例详解
2014/07/11 PHP
php操作MongoDB类实例
2015/06/17 PHP
微信公众平台开发之配置与请求
2015/08/26 PHP
php array_slice 取出数组中的一段序列实例
2016/11/04 PHP
用Javascript实现UTF8编码转换成gb2312编码
2006/12/22 Javascript
IE6图片加载的一个BUG解决方法
2010/07/13 Javascript
Extjs中ComboBoxTree实现的下拉框树效果(自写)
2013/05/28 Javascript
Jquery通过Ajax访问XML数据的小例子
2013/11/18 Javascript
jquery实现pager控件示例
2014/04/09 Javascript
jQuery元素的隐藏与显示实例
2015/01/20 Javascript
Javascript定义类(class)的三种方法详解
2015/03/13 Javascript
JavaScript中数据结构与算法(五):经典KMP算法
2015/06/19 Javascript
基于jquery实现表格无刷新分页
2016/01/07 Javascript
javascript模块化简单解析
2016/04/07 Javascript
JavaScript中闭包之浅析解读(必看篇)
2016/08/25 Javascript
第一次接触Bootstrap框架
2016/10/24 Javascript
JS简单实现移动端日历功能示例
2016/12/28 Javascript
详解基于 axios 的 Vue 项目 http 请求优化
2017/09/04 Javascript
微信小程序开发之路由切换页面重定向问题
2018/09/18 Javascript
Vue 页面权限控制和登陆验证功能的实例代码
2019/06/20 Javascript
浅谈vue中$bus的使用和涉及到的问题
2020/07/28 Javascript
[01:32:50]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第一场 1月25日
2021/03/11 DOTA
python3.6+selenium实现操作Frame中的页面元素
2019/07/16 Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
2019/08/28 Python
python多线程扫描端口(线程池)
2019/09/04 Python
利用python计算时间差(返回天数)
2019/09/07 Python
Windows下实现将Pascal VOC转化为TFRecords
2020/02/17 Python
解决python运行效率不高的问题
2020/07/20 Python
电子商务专业自我鉴定
2013/12/18 职场文书
会计学自我鉴定
2014/02/06 职场文书
手工社团活动方案
2014/02/17 职场文书
党员个人剖析材料
2014/09/30 职场文书
最新的离婚协议书范本!
2019/07/02 职场文书
基于Nginx实现限制某IP短时间访问次数
2021/03/31 Servers
css3属性选择器 “~”(波浪号) “,”(逗号) “+”(加号)和 “>”(大于号)
2022/04/19 HTML / CSS