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 相关文章推荐
发布BlueShow v1.0 图片浏览器(类似lightbox)blueshow.js 打包下载
Jul 21 Javascript
JavaScript 的方法重载效果
Aug 07 Javascript
调用HttpHanlder的几种返回方式小结
Dec 20 Javascript
jQuery源码解读之removeClass()方法分析
Feb 20 Javascript
Jquery实现地铁线路指示灯提示牌效果的方法
Mar 02 Javascript
JavaScript使用shift方法移除素组第一个元素实例分析
Apr 06 Javascript
js字符串操作总结(必看篇)
Nov 22 Javascript
使用 Javascript 实现浏览器推送提醒功能的示例
Nov 03 Javascript
一个简单的node.js界面实现方法
Jun 01 Javascript
vue.js自定义组件directives的实例代码
Nov 09 Javascript
手把手带你封装一个vue component第三方库
Feb 14 Javascript
JS实现灯泡开关特效
Mar 30 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
AJAX for PHP简单表数据查询实例
2007/01/02 PHP
什么是MVC,好东西啊
2007/05/03 PHP
php实现仿写CodeIgniter的购物车类
2015/07/29 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
Laravel 创建可以传递参数 Console服务的例子
2019/10/14 PHP
javascript firefox兼容ie的dom方法脚本
2008/05/18 Javascript
javascript两种function的定义介绍及区别说明
2013/05/02 Javascript
JQuery获取样式中的background-color颜色值的问题
2013/08/20 Javascript
javascript使用定时函数实现跳转到某个页面
2013/12/25 Javascript
JavaScrip调试技巧之断点调试
2015/10/22 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
BootStrap组件之进度条的基本用法
2017/01/19 Javascript
微信小程序 ES6Promise.all批量上传文件实现代码
2017/04/14 Javascript
jquery引入外部CDN 加载失败则引入本地jq库
2018/05/23 jQuery
JS前端知识点总结之页面加载事件,数组操作,DOM节点操作,循环和分支
2019/07/04 Javascript
浅谈vue获得后台数据无法显示到table上面的坑
2020/08/13 Javascript
[07:03]显微镜下的DOTA2第九期——430圣堂刺客杀戮秀
2014/06/20 DOTA
利用打码兔和超人打码自封装的打码类分享
2014/03/16 Python
pygame播放音乐的方法
2015/05/19 Python
通过mod_python配置运行在Apache上的Django框架
2015/07/22 Python
Python基于动态规划算法计算单词距离
2015/07/25 Python
Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)
2018/02/21 Python
Numpy 将二维图像矩阵转换为一维向量的方法
2018/06/05 Python
python实现排序算法解析
2018/09/08 Python
Pandas库之DataFrame使用的学习笔记
2019/06/21 Python
英国最好的包装供应商:Priory Direct
2019/12/17 全球购物
int和Integer有什么区别
2013/05/25 面试题
前处理组长岗位职责
2014/03/01 职场文书
党校学习心得体会范文
2014/09/09 职场文书
师德师风个人自我剖析材料
2014/09/27 职场文书
教师三严三实心得体会
2014/10/11 职场文书
领导干部作风建设总结
2014/10/23 职场文书
庆六一开幕词
2015/01/29 职场文书
2015年安全教育月活动总结
2015/03/26 职场文书
彩虹社八名人气艺人全新周边限时推出,性转女装男装一次拥有!
2022/04/01 日漫
CSS实现鼠标悬浮动画特效
2023/05/07 HTML / CSS