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模拟多线程
Feb 07 Javascript
W3C Group的JavaScript1.8 新特性介绍
May 19 Javascript
JavaScript中instanceof运算符的用法总结
Nov 19 Javascript
使用jquery菜单插件HoverTree仿京东无限级菜单
Dec 18 Javascript
jquery中show()、hide()和toggle()用法实例
Jan 15 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
Dec 06 Javascript
vue+vux实现移动端文件上传样式
Jul 28 Javascript
详解vue2 $watch要注意的问题
Sep 08 Javascript
从源码看angular/material2 中 dialog模块的实现方法
Oct 18 Javascript
分析JS中this引发的bug
Dec 12 Javascript
Koa 中的错误处理解析
Apr 09 Javascript
vue打开新窗口并实现传参的图文实例
Mar 04 Vue.js
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
使用配置类定义Codeigniter全局变量
2014/06/12 PHP
使用PHP+AJAX让WordPress动态加载文章的教程
2015/12/11 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
2017/12/26 PHP
获取JavaScript用户自定义类的类名称的代码
2007/03/08 Javascript
Javascript 拖拽的一些简单的应用(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
canvas实现图像截取功能
2017/02/06 Javascript
js 数字、字符串、布尔值的转换方法(必看)
2017/04/07 Javascript
自定义vue全局组件use使用、vuex的使用详解
2017/06/14 Javascript
vue.js内部自定义指令与全局自定义指令的实现详解(利用directive)
2017/07/11 Javascript
js学使用setTimeout实现轮循动画
2017/07/17 Javascript
JSON在Javascript中的使用(eval和JSON.parse的区别)详细解析
2017/09/05 Javascript
js 两数组去除重复数值的实例
2017/12/06 Javascript
收集前端面试题之url、href、src
2018/03/22 Javascript
微信小程序传值以及获取值方法的详解
2019/04/29 Javascript
node.js中事件触发器events的使用方法实例分析
2019/11/23 Javascript
[原创]pip和pygal的安装实例教程
2017/12/07 Python
Python常见字符串操作函数小结【split()、join()、strip()】
2018/02/02 Python
Python 实现引用其他.py文件中的类和类的方法
2018/04/29 Python
Django model反向关联名称的方法
2018/12/15 Python
pycharm远程开发项目的实现步骤
2019/01/20 Python
Django框架视图层URL映射与反向解析实例分析
2019/07/29 Python
python批量处理文件或文件夹
2020/07/28 Python
JetBrains PyCharm(Community版本)的下载、安装和初步使用图文教程详解
2020/03/19 Python
Python3实现建造者模式的示例代码
2020/06/28 Python
HTML5 File接口在web页面上使用文件下载
2017/02/27 HTML / CSS
String和StringBuffer的区别
2015/08/13 面试题
教师推荐信范文
2013/11/24 职场文书
内容编辑个人求职信
2013/12/10 职场文书
高中军训第一天感言
2014/03/06 职场文书
聚美优品恶搞广告词
2014/03/14 职场文书
社区消防工作实施方案
2014/03/21 职场文书
战略性融资合作协议书范本
2014/10/17 职场文书
鸟的天堂导游词
2015/01/31 职场文书
2016年寒假社会实践活动心得体会
2015/10/09 职场文书
2016年度农村党员干部主题教育活动总结
2016/04/06 职场文书
Nginx的基本概念和原理
2022/03/21 Servers