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 相关文章推荐
通过event对象的fromElement属性解决热区设置主实体的一个bug
Dec 22 Javascript
jQuery Ajax文件上传(php)
Jun 16 Javascript
深入理解JavaScript系列(2) 揭秘命名函数表达式
Jan 15 Javascript
简介JavaScript中的italics()方法的使用
Jun 08 Javascript
jquery自定义表格样式
Nov 23 Javascript
JavaScript的React Web库的理念剖析及基础上手指南
May 10 Javascript
jQuery获取剪贴板内容的方法
Jun 16 Javascript
js中通过getElementsByName访问name集合对象的方法
Oct 31 Javascript
Angularjs 动态改变title标题(兼容ios)
Dec 29 Javascript
web前端vue之CSS过渡效果示例
Jan 10 Javascript
vue实现将一个数组内的相同数据进行合并
Nov 07 Javascript
js实现计时器秒表功能
Dec 16 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
收音机鉴频器对声音的影响和频偏分析
2021/03/02 无线电
thinkphp3.0 模板中函数的使用
2012/11/13 PHP
解析func_num_args与func_get_args函数的使用
2013/06/24 PHP
购物车实现的几种方式优缺点对比
2018/05/02 PHP
php中的钩子理解及应用实例分析
2019/08/30 PHP
对laravel的session获取与存取方法详解
2019/10/08 PHP
Javascript基础教程之数组 array
2015/01/18 Javascript
JS实现双击编辑可修改状态的方法
2015/08/14 Javascript
将JavaScript的jQuery库中表单转化为JSON对象的方法
2015/11/17 Javascript
javascript中的3种继承实现方法
2016/01/27 Javascript
深入理解jquery自定义动画animate()
2016/05/24 Javascript
Angular2 路由问题修复详解
2017/03/01 Javascript
AngularJS自定义指令实现面包屑功能完整实例
2017/05/17 Javascript
Vue应用部署到服务器的正确方式
2017/07/15 Javascript
详解vue中axios的封装
2018/07/18 Javascript
pm2启动ssr失败的解决方法
2019/06/29 Javascript
JS函数基本定义与用法示例
2020/01/15 Javascript
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
JavaScript实现原型封装轮播图
2020/12/27 Javascript
利用python生成一个导出数据库的bat脚本文件的方法
2016/12/30 Python
win10下Python3.6安装、配置以及pip安装包教程
2017/10/01 Python
python中时间模块的基本使用教程
2019/05/14 Python
Python3 列表,数组,矩阵的相互转换的方法示例
2019/08/05 Python
Django CBV与FBV原理及实例详解
2019/08/12 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
2019/08/15 Python
基于python修改srt字幕的时间轴
2020/02/03 Python
Django 删除upload_to文件的步骤
2020/03/30 Python
Python接口测试结果集实现封装比较
2020/05/01 Python
Canon佳能美国官方商店:购买数码相机、数码单反相机、镜头和打印机
2016/11/15 全球购物
学院书画协会部门岗位职责
2013/12/01 职场文书
应聘编辑自荐信范文
2014/03/12 职场文书
安全目标责任书
2014/07/22 职场文书
干部作风建设工作总结
2014/10/29 职场文书
锅炉工岗位职责
2015/02/13 职场文书
医务人员医德考评自我评价
2015/03/03 职场文书
餐厅收银员岗位职责
2015/04/07 职场文书