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 相关文章推荐
图片完美缩放
Sep 07 Javascript
jCallout 轻松实现气泡提示功能
Sep 22 Javascript
JS控制日期显示的小例子
Nov 23 Javascript
js为空或不是对象问题的快速解决方法
Dec 11 Javascript
jquery简单实现外部链接用新窗口打开的方法
May 30 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
Sep 01 Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
Jan 26 Javascript
AngularJS模块详解及示例代码
Aug 17 Javascript
js原生实现FastClick事件的实例
Nov 20 Javascript
express中static中间件的具体使用方法
Oct 17 Javascript
微信小程序(订阅消息)功能
Oct 25 Javascript
微信小程序实现搜索框功能及踩过的坑
Jun 19 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之CodeIgniter学习笔记
2013/06/17 PHP
php版微信公众平台之微信网页登陆授权示例
2016/09/23 PHP
PHP实现字符串翻转功能的方法【递归与循环算法】
2017/11/03 PHP
PHP实现的用户注册表单验证功能简单示例
2019/02/25 PHP
基于jquery的仿百度的鼠标移入图片抖动效果
2010/09/17 Javascript
客户端 使用XML DOM加载json数据的方法
2010/09/28 Javascript
javascript实现playfair和hill密码算法
2014/12/07 Javascript
js纯数字逐一停止显示效果的实现代码
2016/03/16 Javascript
jQuery改变form表单的action,并进行提交的实现代码
2016/05/25 Javascript
JavaScript实现图片轮播组件代码示例
2016/11/22 Javascript
浅析Ajax语法
2016/12/05 Javascript
JavaScript实现购物车基本功能
2017/07/21 Javascript
用jquery获取select标签中选中的option值及文本的示例
2018/01/25 jQuery
jQuery+koa2实现简单的Ajax请求的示例
2018/03/06 jQuery
react 父子组件之间通讯props
2018/09/08 Javascript
webpack file-loader和url-loader的区别
2019/01/15 Javascript
微信小程序基于Taro的分享图片功能实践详解
2019/07/12 Javascript
layui自定义验证,用ajax查询后台是否有重复数据,form.verify的例子
2019/09/06 Javascript
three.js 如何制作魔方
2020/07/31 Javascript
[16:27]DOTA2 HEROS教学视频教你分分钟做大人-艾欧
2014/06/11 DOTA
pycharm中连接mysql数据库的步骤详解
2017/05/02 Python
ubuntu17.4下为python和python3装上pip的方法
2018/06/12 Python
Python中的集合介绍
2019/01/28 Python
Django model update的多种用法介绍
2020/03/28 Python
python3.x提取中文的正则表达式示例代码
2019/07/23 Python
使用TensorFlow-Slim进行图像分类的实现
2019/12/31 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
2020/03/19 Python
一文详述 Python 中的 property 语法
2020/09/01 Python
LocalStorage记住用户和密码功能
2017/07/24 HTML / CSS
一套PHP的笔试题
2013/05/31 面试题
中间件分为哪几类
2012/03/14 面试题
大学应届生求职简历的自我评价
2013/10/08 职场文书
出国留学自荐信
2013/10/25 职场文书
学生保证书格式
2015/02/27 职场文书
幼儿园园长新年寄语
2015/08/17 职场文书
详解Python魔法方法之描述符类
2021/05/26 Python