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 相关文章推荐
Javascript this指针
Jul 30 Javascript
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
Feb 03 Javascript
javascript里模拟sleep(两种实现方式)
Jan 25 Javascript
JavaScript全排列的六种算法 具体实现
Jun 29 Javascript
jsp网页搜索结果中实现选中一行使其高亮
Feb 17 Javascript
director.js实现前端路由使用实例
Feb 03 Javascript
jquery实现树形菜单完整代码
Dec 29 Javascript
jQuery简单入门示例之用户校验demo示例
Jul 09 Javascript
react-native 圆弧拖动进度条实现的示例代码
Apr 12 Javascript
详解vue微信网页授权最终解决方案
Jun 16 Javascript
浅谈JavaScript中this的指向更改
Jul 28 Javascript
通过vue刷新左侧菜单栏操作
Aug 06 Javascript
浅析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
PHP新手上路(六)
2006/10/09 PHP
php array_merge函数使用需要注意的一个问题
2015/03/30 PHP
php获取flash尺寸详细数据的方法
2016/11/12 PHP
php对接java现实加签验签的实例
2016/11/25 PHP
JavaScript 学习笔记(九)call和apply方法
2010/01/11 Javascript
使用IE6看老赵的博客 jQuery初探
2010/01/17 Javascript
增强用户体验友好性之jquery easyui window 窗口关闭时的提示
2012/06/22 Javascript
Javascript实现单张图片浏览
2014/12/18 Javascript
使用jQuery+EasyUI实现CheckBoxTree的级联选中特效
2015/12/06 Javascript
Vuex2.0+Vue2.0构建备忘录应用实践
2016/11/30 Javascript
原生js实现下拉框功能(支持键盘事件)
2017/01/13 Javascript
详解RequireJs官方使用教程
2017/10/31 Javascript
vue 国际化 vue-i18n 双语言 语言包
2018/06/07 Javascript
ES6 Generator函数的应用实例分析
2019/06/26 Javascript
jQuery提示框插件SweetAlert用法分析
2019/08/05 jQuery
vue实现简单跑马灯效果
2020/05/25 Javascript
Python实现针对给定单链表删除指定节点的方法
2018/04/12 Python
Python实现全排列的打印
2018/08/18 Python
在ubuntu16.04中将python3设置为默认的命令写法
2018/10/31 Python
Python装饰器简单用法实例小结
2018/12/03 Python
python开发准备工作之配置虚拟环境(非常重要)
2019/02/11 Python
Python如何存储数据到json文件
2020/03/09 Python
用HTML5实现手机摇一摇的功能的教程
2012/10/30 HTML / CSS
购买200个世界上最好的内衣品牌:Bare Necessities
2017/02/11 全球购物
建筑施工员岗位职责
2013/11/26 职场文书
茶叶店创业计划书范文
2014/01/19 职场文书
学习十八届三中全会精神实施方案
2014/02/17 职场文书
会务接待方案
2014/02/27 职场文书
财务个人年度总结范文
2015/02/26 职场文书
工作证明书
2015/06/15 职场文书
伊索寓言读书笔记
2015/06/30 职场文书
2015年民兵整组工作总结
2015/07/24 职场文书
left join、inner join、right join的区别
2021/04/05 MySQL
MySQL Shell的介绍以及安装
2021/04/24 MySQL
Ajax常用封装库——Axios的使用
2021/05/08 Javascript
mysql left join快速转inner join的过程
2021/06/30 MySQL