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 相关文章推荐
JQuery 文本框回车跳到下一个文本框示例代码
Aug 30 Javascript
JS动态调用方法名示例介绍
Dec 18 Javascript
jQuery 回车事件enter使用示例
Feb 18 Javascript
js实现从数组里随机获取元素
Jan 12 Javascript
javascript中的Function.prototye.bind
Jun 25 Javascript
js实现不提交表单获取单选按钮值的方法
Aug 21 Javascript
实现高性能JavaScript之执行与加载
Jan 30 Javascript
json实现添加、遍历与删除属性的方法
Jun 17 Javascript
javascript显示系统当前时间代码
Dec 29 Javascript
JS排序之快速排序详解
Apr 08 Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
Oct 31 Javascript
浅谈Web Storage API的使用
Jun 23 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
sqlyog 中文乱码问题的设置方法
2008/10/19 PHP
用PHP的ob_start() 控制您的浏览器cache
2009/08/03 PHP
PHP 中魔术常量的实例详解
2017/10/26 PHP
PHP中的自动加载操作实现方法详解
2019/08/06 PHP
JavaScript中的Document文档对象
2008/01/16 Javascript
this和执行上下文实现代码
2010/07/01 Javascript
jQuery层级选择器用法分析
2015/02/10 Javascript
JavaScript实现列表分页功能特效
2015/05/15 Javascript
jQuery增加与删除table列的方法
2016/03/01 Javascript
JavaScript简单获取页面图片原始尺寸的方法
2016/06/21 Javascript
Google 地图事件实例讲解
2016/08/06 Javascript
React Native 截屏组件的示例代码
2017/12/06 Javascript
Vue组件开发技巧总结
2018/03/04 Javascript
js中位运算的运用实例分析
2018/12/11 Javascript
150行Node.js实现的dns代理工具
2019/08/02 Javascript
vue-router之解决addRoutes使用遇到的坑
2020/07/19 Javascript
搭建vscode+vue环境的详细教程
2020/08/31 Javascript
[02:07]2018DOTA2亚洲邀请赛主赛事第三日五佳镜头 fy极限反杀
2018/04/06 DOTA
在Python中调用ggplot的三种方法
2015/04/08 Python
Python编程之属性和方法实例详解
2015/05/19 Python
Python 多进程和数据传递的理解
2017/10/09 Python
Python3 处理JSON的实例详解
2017/10/29 Python
Python元字符的用法实例解析
2018/01/17 Python
Django发送邮件功能实例详解
2019/09/02 Python
如何使用Python发送HTML格式的邮件
2020/02/11 Python
python开发前景如何
2020/06/11 Python
加拿大健康、婴儿和美容产品在线购物:Well.ca
2016/11/30 全球购物
Marmot土拨鼠官网:美国专业户外运动品牌
2018/01/11 全球购物
马来西亚最热门的在线时尚商店:FashionValet
2018/11/11 全球购物
澳大利亚办公室装修:JasonL Office Furniture
2019/06/25 全球购物
Internet体系结构
2014/12/21 面试题
夏季奶茶店创业计划书
2014/01/16 职场文书
希特勒经典演讲稿
2014/05/19 职场文书
捐助感谢信
2015/01/22 职场文书
求职自我评价怎么写
2015/03/09 职场文书
巴黎圣母院读书笔记
2015/06/26 职场文书