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 相关文章推荐
Google Map API更新实现用户自定义标注坐标
Jul 29 Javascript
idTabs基于JQuery的根据URL参数选择Tab插件
Apr 11 Javascript
js相册效果代码(点击创建即可)
Apr 16 Javascript
jquery 页眉单行信息滚动显示实现思路及代码
Jun 26 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
Nov 24 Javascript
javascript实现html页面之间参数传递的四种方法实例分析
Dec 15 Javascript
KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机的方法
Oct 05 Javascript
jQuery插件FusionCharts绘制ScrollColumn2D图效果示例【附demo源码下载】
Mar 22 jQuery
Vue.directive()的用法和实例详解
Mar 04 Javascript
微信小程序自定义对话框弹出和隐藏动画
Jul 19 Javascript
vue实现tab栏点击高亮效果
Aug 19 Javascript
Openlayers学习之地图比例尺控件
Sep 28 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
11个PHPer必须要了解的编程规范
2014/09/22 PHP
javascript编程起步(第二课)
2007/02/27 Javascript
JQuery循环滚动图片代码
2011/12/08 Javascript
理解Javascript闭包
2013/11/01 Javascript
JavaScript计算某一天是星期几的方法
2015/08/05 Javascript
javascript动态获取登录时间和在线时长
2016/02/25 Javascript
javascript判断回文数详解及实现代码
2017/02/03 Javascript
Angular.js与node.js项目里用cookie校验账户登录详解
2017/02/22 Javascript
bootstrap折叠调用collapse()后data-parent不生效的快速解决办法
2017/02/23 Javascript
使用BootStrap实现标签切换原理解析
2017/03/14 Javascript
将 vue 生成的 js 上传到七牛的实例
2017/07/28 Javascript
基于$.ajax()方法从服务器获取json数据的几种方式总结
2018/01/31 Javascript
AngularJS中ng-options实现下拉列表的数据绑定方法
2018/08/13 Javascript
基于Vue中使用节流Lodash throttle详解
2019/10/30 Javascript
pyqt4教程之messagebox使用示例分享
2014/03/07 Python
详解duck typing鸭子类型程序设计与Python的实现示例
2016/06/03 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
2016/06/29 Python
Python中强大的命令行库click入门教程
2016/12/26 Python
Python中用post、get方式提交数据的方法示例
2017/09/22 Python
Python 读取图片文件为矩阵和保存矩阵为图片的方法
2018/04/27 Python
python数据类型之间怎么转换技巧分享
2019/08/20 Python
python 默认参数相关知识详解
2019/09/18 Python
HTML5使用drawImage()方法绘制图像
2014/06/23 HTML / CSS
海淘零差价,宝贝全球购: 宝贝格子
2016/08/24 全球购物
加拿大女鞋品牌:ALDO
2016/11/13 全球购物
Theory美国官网:后现代都市风时装品牌
2018/05/09 全球购物
Foot Locker德国官方网站:美国运动服和鞋类零售商
2018/11/01 全球购物
美国排名第一的泳池用品直接来源:In The Swim
2019/09/23 全球购物
平面设计求职信
2014/03/10 职场文书
幼儿教师师德师风自我剖析材料
2014/09/29 职场文书
简易离婚协议书范本2014
2014/10/15 职场文书
高中班主任心得体会
2016/01/07 职场文书
浅析InnoDB索引结构
2021/04/05 MySQL
详解TS数字分隔符和更严格的类属性检查
2021/05/06 Javascript
教你做个可爱的css滑动导航条
2021/06/15 HTML / CSS
分享很少见很有用的SQL功能CORRESPONDING
2022/08/05 MySQL