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 相关文章推荐
让您的菜单不离网站
Oct 03 Javascript
js 静态动态成员 and 信息的封装和隐藏
May 29 Javascript
jquery不会自动回收xmlHttpRequest对象 导致了内存溢出
Jun 18 Javascript
JavaScript改变HTML元素的样式改变CSS及元素属性
Nov 12 Javascript
jQuery ajax方法传递中文时出现中文乱码的解决方法
Jul 25 Javascript
jQuery简单创建节点的方法
Sep 09 Javascript
jQuery快速实现商品数量加减的方法
Feb 06 Javascript
vue中用动态组件实现选项卡切换效果
Mar 25 Javascript
Vuejs中使用markdown服务器端渲染的示例
Nov 22 Javascript
微信小程序录音实现功能并上传(使用node解析接收)
Feb 26 Javascript
原生js实现表格翻页和跳转
Sep 29 Javascript
javascript实现滚轮轮播图片
Dec 13 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的面向对象编程
2006/10/09 PHP
PHP中创建并处理图象
2006/10/09 PHP
使用sockets:从新闻组中获取文章(三)
2006/10/09 PHP
笑谈配置,使用Smarty技术
2007/01/04 PHP
ThinkPHP中U方法的使用浅析
2014/06/13 PHP
Zend Framework实现多文件上传功能实例
2016/03/21 PHP
PHP htmlspecialchars()函数用法与实例讲解
2019/03/08 PHP
js自带函数备忘 数组
2006/12/29 Javascript
JQuery获取或设置ckeditor的数据(示例代码)
2013/11/15 Javascript
js用正则表达式来验证表单(比较齐全的资源)
2013/11/17 Javascript
angularJS中$apply()方法详解
2015/01/07 Javascript
javascript中checkbox使用方法实例演示
2015/11/19 Javascript
Bootstrap按钮下拉菜单组件详解
2016/05/10 Javascript
BootStrap Typeahead自动补全插件实例代码
2016/08/10 Javascript
javascript获取以及设置光标位置
2017/02/16 Javascript
js数字计算 误差问题的快速解决方法
2017/02/28 Javascript
JS实现简单的天数计算器完整实例
2017/04/28 Javascript
原生js实现简单的焦点图效果实例
2017/12/14 Javascript
web3.js增加eth.getRawTransactionByHash(txhash)方法步骤
2018/03/15 Javascript
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
2020/03/07 Javascript
详解Howler.js Web音频播放终极解决方案
2020/08/23 Javascript
Python中XlsxWriter模块简介与用法分析
2018/04/24 Python
Flask之flask-script模块使用
2018/07/26 Python
简单了解Python matplotlib线的属性
2019/06/29 Python
使用PYTHON解析Wireshark的PCAP文件方法
2019/07/23 Python
兰蔻美国官网:Lancome美国
2017/04/25 全球购物
EVE LOM英国官网:全世界最好的洁面膏
2017/10/30 全球购物
美国时尚假发购物网站:Wigsbuy
2019/04/06 全球购物
舞会礼服和舞会鞋:PromGirl
2019/04/22 全球购物
活动总结模板
2014/05/09 职场文书
股东授权委托书
2014/10/15 职场文书
2015年世界急救日宣传活动方案
2015/05/06 职场文书
如何在centos上使用yum安装rabbitmq-server
2021/03/31 Servers
html+css 实现简易导航栏功能
2021/04/07 HTML / CSS
关于python类SortedList详解
2021/09/04 Python
小程序实现悬浮按钮的全过程记录
2021/10/16 HTML / CSS