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 相关文章推荐
js 代码优化点滴记录
Feb 19 Javascript
JavaScript的strict模式与with关键字介绍
Feb 08 Javascript
js实现时间显示几天前、几小时前或者几分钟前的方法集锦
May 29 Javascript
javascript中JSON对象与JSON字符串相互转换实例
Jul 11 Javascript
非常实用的12个jquery代码片段
Nov 02 Javascript
常见的javascript跨域通信方法
Dec 31 Javascript
JS对HTML表格进行增删改操作
Aug 22 Javascript
AngularJS 单元测试(二)详解
Sep 21 Javascript
angular-cli修改端口号【angular2】
Apr 19 Javascript
详解如何使用node.js的开发框架express创建一个web应用
Dec 20 Javascript
VUE组件中的 Drawer 抽屉实现代码
Aug 06 Javascript
vue+iview实现手机号分段输入框
Mar 25 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
无线电广播的开始
2002/01/30 无线电
一篇入门的php Class 文章
2007/04/04 PHP
PHP与SQL注入攻击[二]
2007/04/17 PHP
escape unescape的php下的实现方法
2007/04/27 PHP
PHP跳转页面的几种实现方法详解
2013/06/08 PHP
基于CI框架的微信网页授权库示例
2016/11/25 PHP
PHP编程实现阳历转换为阴历的方法实例
2017/08/08 PHP
jQuery学习7 操作JavaScript对象和集合的函数
2010/02/07 Javascript
jquery下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法
2010/10/22 Javascript
js原型链原理看图说明
2012/07/07 Javascript
关于jQuery object and DOM element
2013/04/15 Javascript
基于jQuery选择器的整理集合
2013/04/26 Javascript
javascript模拟枚举的简单实例
2014/03/06 Javascript
javascript无刷新评论实现方法
2015/05/13 Javascript
跟我学习javascript的垃圾回收机制与内存管理
2015/11/23 Javascript
Bootstrap每天必学之附加导航(Affix)插件
2016/04/25 Javascript
jQuery操作复选框(CheckBox)的取值赋值实现代码
2017/01/10 Javascript
Node.js 使用命令行工具检查更新
2017/06/08 Javascript
JavaScript常见JSON操作实例分析
2018/08/08 Javascript
微信小程序自定义单项选择器样式
2019/07/25 Javascript
react实现移动端下拉菜单的示例代码
2020/01/16 Javascript
Pytorch入门之mnist分类实例
2018/04/14 Python
钉钉群自定义机器人消息Python封装的实例
2019/02/20 Python
python 图像处理画一个正弦函数代码实例
2019/09/10 Python
python requests抓取one推送文字和图片代码实例
2019/11/04 Python
pytorch AvgPool2d函数使用详解
2020/01/03 Python
Python类super()及私有属性原理解析
2020/06/15 Python
无需压缩软件,用python帮你操作压缩包
2020/08/17 Python
python装饰器实现对异常代码出现进行自动监控的实现方法
2020/09/15 Python
FC-Moto西班牙:摩托车手最大的购物场所之一
2019/04/11 全球购物
大学总结自我鉴定
2014/01/18 职场文书
优秀团员自我评价范文
2014/04/23 职场文书
大学学习计划书范文
2014/05/02 职场文书
2014年优质护理服务工作总结
2014/11/14 职场文书
质量承诺书格式范文
2015/04/28 职场文书
使用Redis实现分布式锁的方法
2022/06/16 Redis