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实例教程(19) 使用HoTMetal(1)
Dec 23 Javascript
Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)
Jun 11 Javascript
jQuery鼠标悬浮链接弹出跟随图片实例代码
Jan 08 Javascript
Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法
Jun 23 Javascript
javascript回到顶部特效
Jul 30 Javascript
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
Jan 08 Javascript
JS生成一维码(条形码)功能示例
Jan 19 Javascript
神级程序员JavaScript300行代码搞定汉字转拼音
May 20 Javascript
ionic使用angularjs表单验证(模板验证)
Dec 12 Javascript
后台使用freeMarker和前端使用vue的方法及遇到的问题
Jun 13 Javascript
微信小程序如何使用canvas二维码保存至手机相册
Jul 15 Javascript
使用Mock.js生成前端测试数据
Dec 13 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写入WRITE编码为UTF8的文件的实现代码
2008/07/07 PHP
PHP开发微信支付的代码分享
2014/05/25 PHP
ThinkPHP权限认证Auth实例详解
2014/07/22 PHP
php计划任务之ignore_user_abort函数实现方法
2015/01/08 PHP
PHP常用的排序和查找算法
2015/08/06 PHP
stream.js 一个很小、完全独立的Javascript类库
2011/10/28 Javascript
js中scrollHeight,scrollWidth,scrollLeft,scrolltop等差别介绍
2012/05/16 Javascript
jquery实现华丽的可折角广告代码
2015/09/02 Javascript
基于HTML5上使用iScroll实现下拉刷新,上拉加载更多
2016/05/21 Javascript
JS焦点图,JS 多个页面放多个焦点图的实例
2016/12/08 Javascript
canvas快速绘制圆形、三角形、矩形、多边形方法介绍
2016/12/29 Javascript
nodejs个人博客开发第七步 后台登陆
2017/04/12 NodeJs
使用jQuery实现页面定时弹出广告效果
2017/08/24 jQuery
js表单序列化判断空值的实例
2017/09/22 Javascript
Vue cli+mui 区域滚动的实例代码
2018/01/25 Javascript
vue中父子组件注意事项,传值及slot应用技巧
2018/05/09 Javascript
JS验证输入的是否是数字及保留几位小数问题
2018/05/09 Javascript
小程序图片剪裁加旋转的示例代码
2018/07/10 Javascript
vue v-for直接循环数字实例
2019/11/07 Javascript
vue实现商品列表的添加删除实例讲解
2020/05/14 Javascript
[00:32]2018DOTA2亚洲邀请赛VG出场
2018/04/03 DOTA
Python实现的最近最少使用算法
2015/07/10 Python
详解字典树Trie结构及其Python代码实现
2016/06/03 Python
Python后台开发Django的教程详解(启动)
2019/04/08 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
2019/07/15 Python
查看Python依赖包及其版本号信息的方法
2019/08/13 Python
Python基于numpy模块实现回归预测
2020/05/14 Python
python文件操作seek()偏移量,读取指正到指定位置操作
2020/07/05 Python
python基本算法之实现归并排序(Merge sort)
2020/09/01 Python
详解Python模块化编程与装饰器
2021/01/16 Python
SmartBuyGlasses美国官网:太阳眼镜和眼镜
2017/08/20 全球购物
初中美术教学反思
2014/01/29 职场文书
通信工程求职信
2014/07/16 职场文书
奔腾年代观后感
2015/06/09 职场文书
2016年共产党员公开承诺书
2016/03/24 职场文书
详细分析PHP7与PHP5区别
2021/06/26 PHP