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 相关文章推荐
不能再简单的无闪刷新验证码原理很简单
Nov 05 Javascript
浏览器加载、渲染和解析过程黑箱简析
Nov 29 Javascript
xmlhttp缓存清除的2种解决方法
Dec 13 Javascript
javascript实现信息增删改查的方法
Jul 25 Javascript
jQuery实现右下角可缩放大小的层完整实例
Jun 20 Javascript
微信小程序 底部导航栏目开发资料
Dec 05 Javascript
微信小程序 MD5加密登录密码详解及实例代码
Jan 12 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
Oct 16 Javascript
javaScript和jQuery自动加载简单代码实现方法
Nov 24 jQuery
Vue 将后台传过来的带html字段的字符串转换为 HTML
Mar 29 Javascript
基于D3.js实现时钟效果
Jul 17 Javascript
mockjs+vue页面直接展示数据的方法
Dec 19 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
长波有什么东西
2021/03/01 无线电
不用iconv库的gb2312与utf-8的互换函数
2006/10/09 PHP
解析数组非数字键名引号的必要性
2013/08/09 PHP
PHP中的魔术方法总结和使用实例
2015/05/11 PHP
Laravel最佳分割路由文件(routes.php)的方式
2016/08/04 PHP
PHP判断数组是否为空的常用方法(五种方法)
2017/02/08 PHP
php简单读取.vcf格式文件的方法示例
2017/09/02 PHP
Laravel框架创建路由的方法详解
2019/09/04 PHP
仿服务器端脚本方式的JS模板实现方法
2007/04/27 Javascript
一些常用弹出窗口/拖放/异步文件上传等实用代码
2013/01/06 Javascript
javascript数据结构与算法之检索算法
2015/04/04 Javascript
学习JavaScript设计模式(多态)
2015/11/25 Javascript
JavaScript实现复制或剪切内容到剪贴板功能的方法
2016/05/23 Javascript
JavaScript页面实时显示当前时间实例代码
2016/10/23 Javascript
jQuery事件绑定方法学习总结(推荐)
2016/11/21 Javascript
浅谈js停止事件冒泡 阻止浏览器的默认行为(阻止超连接 #)
2017/02/08 Javascript
JS实现队列的先进先出功能示例
2017/05/10 Javascript
详解Vue项目引入CreateJS的方法(亲测可用)
2019/05/30 Javascript
只有 20 行的 JavaScript 模板引擎实例详解
2020/05/11 Javascript
TensorFlow深度学习之卷积神经网络CNN
2018/03/09 Python
详解python中的hashlib模块的使用
2019/04/22 Python
python cv2在验证码识别中应用实例解析
2019/12/25 Python
windows下python安装pip方法详解
2020/02/10 Python
python计算导数并绘图的实例
2020/02/29 Python
Python单元测试及unittest框架用法实例解析
2020/07/09 Python
Spartoo比利时:欧洲时尚购物网站
2017/12/06 全球购物
物流管理专业职业生涯规划书
2014/01/06 职场文书
快递业务员岗位职责
2014/01/06 职场文书
会计电算化毕业生自荐信
2014/03/03 职场文书
质量月活动策划方案
2014/03/10 职场文书
三八节标语
2014/06/27 职场文书
施工安全汇报材料
2014/08/17 职场文书
初中教师个人工作总结
2015/02/10 职场文书
学生会招新宣传语
2015/07/13 职场文书
2016年学校十一国庆节活动总结
2016/04/01 职场文书
2019假期福利管理制度!
2019/07/15 职场文书