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 相关文章推荐
javascript 打印页面代码
Mar 24 Javascript
js类型检查实现代码
Oct 29 Javascript
使用js判断TextBox控件值改变然后出发事件
Mar 07 Javascript
简单实现兼容各大浏览器的js复制内容到剪切板
Sep 09 Javascript
AngularJS 依赖注入详解及示例代码
Aug 17 Javascript
jQuery UI Grid 模态框中的表格实例代码
Apr 01 jQuery
Vue.js实战之利用vue-router实现跳转页面
Apr 01 Javascript
详解如何使用Node.js编写命令工具——以vue-cli为例
Jun 29 Javascript
JavaScript中的return布尔值的用法和原理解析
Aug 14 Javascript
angular json对象push到数组中的方法
Feb 27 Javascript
微信小程序如何自定义table组件
Jun 29 Javascript
vue 插槽简介及使用示例
Nov 19 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
咖啡与牛奶
2021/03/03 冲泡冲煮
PHP超牛逼无限极分类生成树方法
2015/05/11 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
详解PHP的抽象类和抽象方法以及接口总结
2019/03/15 PHP
YII2.0框架行为(Behavior)深入详解
2019/07/26 PHP
在网页里看flash的trace数据的js类
2009/01/10 Javascript
Javascript处理DOM元素事件实现代码
2012/05/23 Javascript
关于jQuery新的事件绑定机制on()的使用技巧
2013/04/26 Javascript
JavaScript通过RegExp实现客户端验证处理程序
2013/05/07 Javascript
根据身份证号自动输出相关信息(籍贯,出身日期,性别)
2013/11/15 Javascript
jQuery的Scrollify插件实现滑动到页面下一节点
2015/07/05 Javascript
JS实现黑色风格的网页TAB选项卡效果代码
2015/10/09 Javascript
Websocket协议详解及简单实例代码
2016/12/12 Javascript
详解jQuery lazyload 懒加载
2016/12/19 Javascript
折叠菜单及选择器的运用
2017/02/03 Javascript
前端开发之CSS原理详解
2017/03/11 Javascript
Vue2.0 slot分发内容与props验证的方法
2017/12/12 Javascript
BootStrap模态框闪退问题实例代码详解
2018/12/10 Javascript
Vue中的transition封装组件的实现方法
2019/08/13 Javascript
解决vue打包 npm run build-test突然不动了的问题
2020/11/13 Javascript
vue图片裁剪插件vue-cropper使用方法详解
2020/12/16 Vue.js
python递归打印某个目录的内容(实例讲解)
2017/08/30 Python
利用python将图片转换成excel文档格式
2017/12/30 Python
django 使用 PIL 压缩图片的例子
2019/08/16 Python
python安装第三方库如xlrd的方法
2020/10/31 Python
奥地利网上书店:Weltbild
2017/07/14 全球购物
品管员岗位职责
2013/11/10 职场文书
电子商务专业个人的自我评价
2013/11/19 职场文书
艺术应用与设计个人的自我评价
2013/11/23 职场文书
求职信范文大全
2014/05/26 职场文书
婚礼答谢礼品
2015/01/20 职场文书
大学生村官工作总结2015
2015/04/09 职场文书
2015年教务处干事工作总结
2015/07/22 职场文书
军训后的感想
2015/08/07 职场文书
工作自我评价范文
2019/03/21 职场文书
使用RedisTemplat实现简单的分布式锁
2021/11/20 Redis