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 相关文章推荐
学习ExtJS(一) 之基础前提
Oct 07 Javascript
$.format,jquery.format 使用说明
Jul 13 Javascript
JS清除IE浏览器缓存的方法
Jul 26 Javascript
改变隐藏的input中value的值代码
Dec 30 Javascript
JavaScript打印网页指定区域的例子
May 03 Javascript
JS实现点击按钮随机生成可拖动的不同颜色块示例
Jan 30 Javascript
js实现多个倒计时并行 js拼团倒计时
Feb 25 Javascript
详解关于JSON.parse()和JSON.stringify()的性能小测试
Mar 14 Javascript
vue-cli脚手架引入弹出层layer插件的几种方法
Jun 24 Javascript
微信小程序如何自定义table组件
Jun 29 Javascript
微信小程序拼接图片链接无底洞深入探究
Sep 03 Javascript
vue配置多代理服务接口地址操作
Sep 08 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中source #N问题的解决方法
2014/01/27 PHP
ThinkPHP3.1新特性之多层MVC的支持
2014/06/19 PHP
php实现连接access数据库并转txt写入的方法
2017/02/08 PHP
javascript实现划词标记+划词搜索功能
2007/03/06 Javascript
基于jQuery的弹出警告对话框美化插件(警告,确认和提示)
2010/06/10 Javascript
基于jQuery的input输入框下拉提示层(自动邮箱后缀名)
2012/06/14 Javascript
Javascript中产生固定结果的函数优化技巧
2013/01/16 Javascript
js正则表达式验证邮件地址
2015/11/12 Javascript
jQuery CSS3相结合实现时钟插件
2016/01/08 Javascript
使用JavaScript实现弹出层效果的简单实例
2016/05/31 Javascript
jQuery实现表格冻结顶栏效果
2017/08/20 jQuery
JQuery 获取多个select标签option的text内容(实例)
2017/09/07 jQuery
Node.js使用MySQL连接池的方法实例
2018/02/11 Javascript
Vue render深入开发讲解
2018/04/13 Javascript
Vue 框架之键盘事件、健值修饰符、双向数据绑定
2018/11/14 Javascript
Vue项目部署在Spring Boot出现页面空白问题的解决方案
2018/11/26 Javascript
使用 Element UI Table 的 slot-scope方法
2019/10/10 Javascript
解决Can't find variable: SockJS vue项目的问题
2020/09/22 Javascript
理解python多线程(python多线程简明教程)
2014/06/09 Python
wxPython窗口中文乱码解决方法
2014/10/11 Python
Python实现根据IP地址和子网掩码算出网段的方法
2015/07/30 Python
python中lambda()的用法
2017/11/16 Python
Python排序搜索基本算法之选择排序实例分析
2017/12/09 Python
python爬取网易云音乐评论
2018/11/16 Python
Python基础学习之函数方法实例详解
2019/06/18 Python
Python 二叉树的层序建立与三种遍历实现详解
2019/07/29 Python
台湾母婴用品限时团购:妈咪爱
2018/08/03 全球购物
家得宝墨西哥官网:The Home Depot墨西哥
2019/11/18 全球购物
如何查看在weblogic中已经发布的EJB
2012/06/01 面试题
医院护士求职自荐信格式
2013/09/21 职场文书
设计师求职信模板
2014/05/06 职场文书
投标服务承诺书
2014/05/28 职场文书
2014年劳动部工作总结
2014/12/11 职场文书
介绍信如何写
2015/01/31 职场文书
一个都不能少观后感
2015/06/04 职场文书
用python批量解压带密码的压缩包
2021/05/31 Python