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操作excel生成报表示例
May 08 Javascript
基于jquery ui的alert,confirm方案(支持换肤)
Apr 03 Javascript
JS实现slide文字框缩放伸展效果代码
Nov 05 Javascript
浅析JS获取url中的参数实例代码
Jun 14 Javascript
jQuery Easyui datagrid editor为combobox时指定数据源实例
Dec 19 Javascript
input file样式修改以及图片预览删除功能详细概括(推荐)
Aug 17 Javascript
浅谈在vue项目中如何定义全局变量和全局函数
Oct 24 Javascript
详解在vue-cli项目下简单使用mockjs模拟数据
Oct 19 Javascript
webpack中如何加载静态文件的方法步骤
May 18 Javascript
微信小程序使用Vant Weapp组件库的方法步骤
Aug 01 Javascript
微信小程序如何实现radio单选框单击打勾和取消
Jan 21 Javascript
Ant design vue table 单击行选中 勾选checkbox教程
Oct 24 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
html中select语句读取mysql表中内容
2006/10/09 PHP
php 无限极分类
2008/03/27 PHP
浅谈discuz密码加密的方式
2014/05/22 PHP
通过上下左右键和回车键切换光标实现代码
2013/03/08 Javascript
jquery在IE、FF浏览器的差别详细探讨
2013/04/28 Javascript
js实现的折叠导航示例
2013/11/29 Javascript
js实现动态改变字体大小代码
2014/01/02 Javascript
javascript获取浏览器类型和版本的方法(js获取浏览器版本)
2014/03/13 Javascript
js实现适用于素材网站的黑色多级菜单导航条效果
2015/08/24 Javascript
jQuery复制节点用法示例(clone方法)
2016/09/08 Javascript
微信小程序-消息提示框实例
2016/11/24 Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
2016/12/24 Javascript
vue父组件通过props如何向子组件传递方法详解
2017/08/16 Javascript
jQuery实现的回车触发按钮事件功能示例
2018/03/25 jQuery
Angularjs中date过滤器失效的问题及解决方法
2018/07/06 Javascript
vue实现百度搜索功能
2020/12/28 Javascript
JS数组方法reduce的用法实例分析
2020/03/03 Javascript
Python使用urllib2模块实现断点续传下载的方法
2015/06/17 Python
利用Python开发实现简单的记事本
2016/11/15 Python
一个基于flask的web应用诞生 用户注册功能开发(5)
2017/04/11 Python
matplotlib 输出保存指定尺寸的图片方法
2018/05/24 Python
TensorFlow数据输入的方法示例
2018/06/19 Python
在django-xadmin中APScheduler的启动初始化实例
2019/11/15 Python
Python3并发写文件与Python对比
2019/11/20 Python
Html5移动端弹幕动画实现示例代码
2018/08/27 HTML / CSS
韩国江南富人区高端时尚百货商场:Galleria(格乐丽雅)
2018/03/27 全球购物
Book Depository亚太地区:一家领先的国际图书零售商
2019/05/05 全球购物
亮化工程实施方案
2014/03/17 职场文书
党的群众路线教育实践方案
2014/05/11 职场文书
电子信息工程自荐信
2014/05/26 职场文书
企业文化标语口号
2014/06/09 职场文书
全国法制宣传日活动总结
2015/05/05 职场文书
大学生心理健康活动总结
2015/05/08 职场文书
外科护士长工作总结
2015/08/12 职场文书
妇联2016年六一国际儿童节活动总结
2016/04/06 职场文书
班组长如何制订适合本班组的工作计划?
2019/07/10 职场文书