javascript的函数作用域


Posted in Javascript onNovember 12, 2014

在一些类似c语言的编程语言中,花括号内的每一段代码都具有各自的作用域,而且变量在声明他们的代码段之外是不可见的,我们称为块级作用域(block scope),而javascript中没有块级作用域。取而代之的javascript使用的是函数作用域(function scope):变量在声明它的函数体以及这个函数体嵌套的任意函数体内都是有定义的。 在如下代码中,在不同位置定义的i,j和k,他们再同一个作用域内都是有定义的

function text(o)   

{   

    var i=0;   

    alert(typeof o);   

    if(typeof o == "string")   

    {   

        var j=0;   

        for(var k=0;k<10;k++)   

        {   

            alert(k);//输出0-9   

        }   

        alert(k);//输出10   

    }   

    alert(j);//输出0   

}  

  javascript的函数作用域指在函数内部声明的所有的变量在函数体内始终是可见的。有意思的是,这意味着变量在声明之前甚至已经可用。javascript的这个特性被非正式的称为声明提前(hoisting),即javascript的函数体内声明的所有的变量(不涉及赋值)都被“提前”至函数体的顶部。看以下代码

var global="globas";   

function globals()   

{   

    alert(global);//undefined   

    var global="hello QDao";   

    alert(global);//hello QDao   

} 

由于函数作用域的特性,局部变量在整个函数体始终是有定义的,也就是说在函数体内部变量遮盖了同名的全局变量。尽管如此在程序执行到var语句的时候,局部变量才会被真正的赋值,因此,上述过程等价于:将函数内的变量声明“提前”至函数体顶部,同事变量初始化留在原来的位置:

var global="globas";   

function globals()   

{   

  

       var global;   

    alert(global);//undefined   

    global="hello QDao";   

    alert(global);//hello QDao   

} 

Javascript 相关文章推荐
FireFox中textNode分片的问题
Apr 10 Javascript
js实现iframe动态调整高度的代码
Jan 06 Javascript
使弱类型的语言JavaScript变强势
Jun 22 Javascript
jQuery实现的一个自定义Placeholder属性插件
Aug 11 Javascript
Jquery插件之Fancybox丰富的弹出层效果附源码下载
Dec 02 Javascript
js实现的页面矩阵图形变换特效
Jan 26 Javascript
微信小程序 后台登录(非微信账号)实例详解
Mar 31 Javascript
vue实现菜单切换功能
May 08 Javascript
layui radio单选限制下一个radio单选的实例
Sep 03 Javascript
Vue路由守卫之路由独享守卫
Sep 25 Javascript
微信小程序实现列表滚动头部吸顶的示例代码
Jul 12 Javascript
如何让vue长列表快速加载
Mar 29 Vue.js
浅析javascript的间隔调用和延时调用
Nov 12 #Javascript
jQuery的deferred对象详解
Nov 12 #Javascript
探寻Javascript执行效率问题
Nov 12 #Javascript
推荐8款jQuery轻量级树形Tree插件
Nov 12 #Javascript
推荐10个2014年最佳的jQuery视频插件
Nov 12 #Javascript
JavaScript中提前声明变量或函数例子
Nov 12 #Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
Nov 12 #Javascript
You might like
simplehtmldom Doc api帮助文档
2012/03/26 PHP
使用PHP编写的SVN类
2013/07/18 PHP
获取URL文件名后缀
2013/10/24 PHP
一个简单且很好用的php分页类
2013/10/26 PHP
用正则表达式 动态创建/增加css style script 兼容IE firefox
2009/03/10 Javascript
jQuery 源码分析笔记(7) Queue
2011/06/19 Javascript
$.ajax返回的JSON无法执行success的解决方法
2011/09/09 Javascript
JavaScript对象和字串之间的转换实例探讨
2013/04/21 Javascript
JS打开层/关闭层/移动层动画效果的实例代码
2013/05/11 Javascript
Jquery简单实现GridView行高亮的方法
2015/06/15 Javascript
.NET微信公众号开发之创建自定义菜单
2015/07/16 Javascript
深入学习jQuery Validate表单验证(二)
2016/01/18 Javascript
Angularjs 实现一个幻灯片示例代码
2016/09/08 Javascript
IOS中safari下的select下拉菜单文字过长不换行的解决方法
2016/09/26 Javascript
微信小程序template模板实例详解
2017/10/27 Javascript
NW.js 简介与使用方法
2018/02/01 Javascript
世界上最短的数字判断js代码
2019/09/09 Javascript
Js图片点击切换轮播实现代码
2020/07/27 Javascript
[44:22]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第一场 11.01
2020/11/02 DOTA
python读取json文件并将数据插入到mongodb的方法
2015/03/23 Python
Python简单实现自动删除目录下空文件夹的方法
2017/08/29 Python
利用信号如何监控Django模型对象字段值的变化详解
2017/11/27 Python
一个月入门Python爬虫学习,轻松爬取大规模数据
2018/01/03 Python
Python实现二维数组输出为图片
2018/04/03 Python
Django使用Jinja2模板引擎的示例代码
2019/08/09 Python
Pytorch之parameters的使用
2019/12/31 Python
在django中实现choices字段获取对应字段值
2020/07/12 Python
用python绘制樱花树
2020/10/09 Python
CSS实现半透明边框与多重边框的场景分析
2019/11/13 HTML / CSS
杭州-飞时达软件有限公司.net笔面试
2012/04/28 面试题
计算机通信专业推荐信
2014/02/22 职场文书
副校长竞聘演讲稿
2014/09/01 职场文书
公司员工体检通知
2015/04/21 职场文书
2015年医院创卫工作总结
2015/04/22 职场文书
排查MySQL生产环境索引没有效果
2022/04/11 MySQL
nginx搭建NFS网络文件系统
2022/04/14 Servers