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 语法基础 想学习js的朋友可以看看
Dec 16 Javascript
jquery改变tr背景色的示例代码
Dec 28 Javascript
javascript设置页面背景色及背景图片的方法
Dec 29 Javascript
全屏js头像上传插件源码高清版
Mar 29 Javascript
轻松实现js弹框显示选项
Sep 13 Javascript
jQuery设计思想
Mar 07 Javascript
JavaScript满天星导航栏实现方法
Mar 08 Javascript
对angular 监控数据模型变化的事件方法$watch详解
Oct 09 Javascript
详解Vue+ElementUI从零开始搭建自己的网站(一、环境搭建)
Apr 30 Javascript
layui导出所有数据的例子
Sep 10 Javascript
小程序实现日历左右滑动效果
Oct 21 Javascript
Vue中强制组件重新渲染的正确方法
Jan 03 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
Nginx实现反向代理
2017/09/20 Servers
Javascript select控件操作大全(新增、修改、删除、选中、清空、判断存在等)
2008/12/19 Javascript
JS格式化数字金额用逗号隔开保留两位小数
2013/10/18 Javascript
jQuery+CSS3实现树叶飘落特效
2015/02/01 Javascript
node-http-proxy修改响应结果实例代码
2016/06/06 Javascript
关于Function中的bind()示例详解
2016/12/02 Javascript
基于Bootstrap 3 JQuery及RegExp的表单验证功能
2017/02/16 Javascript
vue基于Element构建自定义树的示例代码
2017/09/19 Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
2018/03/15 Javascript
Vue SSR 组件加载问题
2018/05/02 Javascript
jquery使用FormData实现异步上传文件
2018/10/25 jQuery
详解vuex 渐进式教程实例代码
2018/11/27 Javascript
详解JavaScript中精度失准问题及解决方法
2020/02/04 Javascript
[03:45]Newbee战队出征西雅图 决战2016国际邀请赛
2016/08/02 DOTA
让python同时兼容python2和python3的8个技巧分享
2014/07/11 Python
浅谈Python的Django框架中的缓存控制
2015/07/24 Python
Python标准库sched模块使用指南
2017/07/06 Python
浅析使用Python操作文件
2017/07/31 Python
python3使用requests模块爬取页面内容的实战演练
2017/09/25 Python
Python中defaultdict与lambda表达式用法实例小结
2018/04/09 Python
Django跨域请求问题的解决方法示例
2018/06/16 Python
python面试题小结附答案实例代码
2019/04/11 Python
Python-Seaborn热图绘制的实现方法
2019/07/15 Python
wxpython+pymysql实现用户登陆功能
2019/11/19 Python
Jupyter notebook无法导入第三方模块的解决方式
2020/04/15 Python
Python3读取和写入excel表格数据的示例代码
2020/06/09 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
2020/11/05 Python
分享一个H5原生form表单的checkbox特效代码
2018/02/26 HTML / CSS
美国旅游网站:Tours4Fun
2017/02/17 全球购物
Desigual德国官网:在线购买原创服装
2018/03/27 全球购物
Bibloo罗马尼亚网站:女装、男装、童装及鞋子和配饰
2019/07/20 全球购物
小米乌克兰网上商店:Xiaomi.UA
2019/10/29 全球购物
遇到的Mysql的面试题
2014/06/29 面试题
出国留学经济担保书
2014/04/01 职场文书
工程项目经理任命书
2014/06/05 职场文书
在项目中使用redis做缓存的一些思路
2021/09/14 Redis