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 常用关键字列表集合
Dec 04 Javascript
js判断FCKeditor内容是否为空的两种形式
May 14 Javascript
js中settimeout方法加参数
Feb 28 Javascript
js下将阿拉伯数字每三位一逗号分隔(如:15000000转化为15,000,000)
Jun 02 Javascript
jQuery实现标题有打字效果的焦点图代码
Nov 16 Javascript
详述JavaScript实现继承的几种方式(推荐)
Mar 22 Javascript
JavaScript鼠标事件,点击鼠标右键,弹出div的简单实例
Aug 03 Javascript
利用JavaScript在网页实现八数码启发式A*算法动画效果
Apr 16 Javascript
详解React Native 采用Fetch方式发送跨域POST请求
Nov 15 Javascript
Javascript中prototype与__proto__的关系详解
Mar 11 Javascript
用JS实现一个简单的打砖块游戏
Dec 11 Javascript
JS数组方法some、every和find的使用详情
Oct 05 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
多文件上载系统完整版
2006/10/09 PHP
利用PHP生成静态HTML文档的原理
2012/10/29 PHP
PHP递归复制、移动目录的自定义函数分享
2014/11/18 PHP
ThinkPHP在Cli模式下使用模板引擎的方法
2015/09/25 PHP
json格式化/压缩工具 Chrome插件扩展版
2010/05/25 Javascript
重写javascript中window.confirm的行为
2012/10/21 Javascript
js数组去重的hash方法
2016/12/22 Javascript
JS+html5制作简单音乐播放器
2020/09/13 Javascript
javascript数组去重常用方法实例分析
2017/04/11 Javascript
简单快速的实现js计算器功能
2017/08/17 Javascript
详解Nodejs 通过 fs.createWriteStream 保存文件
2017/10/10 NodeJs
Vue.JS项目中5个经典Vuex插件
2017/11/28 Javascript
JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
2018/05/14 Javascript
Nodejs核心模块之net和http的使用详解
2019/04/02 NodeJs
利用JS如何获取form表单数据
2019/12/19 Javascript
JavaScript数组常用的增删改查与其他属性详解
2020/10/13 Javascript
利用Python实现图书超期提醒
2016/08/02 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
2018/05/29 Python
pygame游戏之旅 如何制作游戏障碍
2018/11/20 Python
django-rest-framework解析请求参数过程详解
2019/07/18 Python
Django urls.py重构及参数传递详解
2019/07/23 Python
Python编程学习之如何判断3个数的大小
2019/08/07 Python
python滑块验证码的破解实现
2019/11/10 Python
python打印n位数“水仙花数”(实例代码)
2019/12/25 Python
PyTorch中的Variable变量详解
2020/01/07 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
2020/01/08 Python
在keras中对单一输入图像进行预测并返回预测结果操作
2020/07/09 Python
python3.6中anaconda安装sklearn踩坑实录
2020/07/28 Python
JRE、JDK、JVM之间的关系怎样
2012/05/16 面试题
学员自我鉴定
2014/03/19 职场文书
校园演讲稿汇总
2014/05/21 职场文书
群众路线党员个人整改措施
2014/10/27 职场文书
2014高三学生考试作弊检讨书
2014/12/14 职场文书
行政撤诉申请书
2015/05/18 职场文书
心得体会格式及范文
2016/01/25 职场文书
2019通用版劳动合同范本!
2019/07/11 职场文书