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 相关文章推荐
基于jQuery的history历史记录插件
Dec 11 Javascript
JavaScript面向对象之Prototypes和继承
Jul 12 Javascript
js禁止document element对象选中文本实现代码
Mar 21 Javascript
javascript日期对象格式化为字符串的实现方法
Jan 14 Javascript
Js获取图片原始宽高的实现代码
May 17 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
Mar 21 Javascript
Vue 项目代理设置的优化
Apr 17 Javascript
jQuery实现表格隔行换色
Sep 01 jQuery
vue-router权限控制(简单方式)
Oct 29 Javascript
微信小程序当前时间时段选择器插件使用方法详解
Dec 28 Javascript
jQuery实现动态操作table行
Nov 23 jQuery
vue-router中hash模式与history模式的区别
Jun 23 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
thinkphp文件引用与分支结构用法实例
2014/11/26 PHP
详解php中空字符串和0之间的关系
2016/10/23 PHP
PHP基于XMLWriter操作xml的方法分析
2017/07/17 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
2019/01/28 PHP
数组Array进行原型prototype扩展后带来的for in遍历问题
2010/02/07 Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(上:事件篇)
2010/03/24 Javascript
js实现杯子倒水问题自动求解程序
2013/03/25 Javascript
JavaScript中的prototype.bind()方法介绍
2014/04/04 Javascript
jQuery模拟点击A标记示例参考
2014/04/17 Javascript
js+css绘制颜色动态变化的圈中圈效果
2016/01/27 Javascript
动态加载js、css的简单实现代码
2016/05/26 Javascript
对象转换为原始值的实现方法
2016/06/06 Javascript
xmlplus组件设计系列之网格(DataGrid)(10)
2017/05/05 Javascript
用js将long型数据转换成date型或datetime型的实例
2017/07/03 Javascript
微信小程序实现上传图片功能
2018/05/28 Javascript
[02:41]《西雅图我们来了》2015国际邀请赛出征全记录
2015/07/23 DOTA
[01:02:34]TFT vs VGJ.T Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
[46:38]完美世界DOTA2联赛PWL S2 Magma vs PXG 第三场 11.28
2020/12/02 DOTA
介绍Python的Django框架中的QuerySets
2015/04/20 Python
用python实现将数组元素按从小到大的顺序排列方法
2018/07/02 Python
Python正则表达式实现简易计算器功能示例
2019/05/07 Python
利用python在大量数据文件下删除某一行的例子
2019/08/21 Python
Python的条件锁与事件共享详解
2019/09/12 Python
python 如何去除字符串头尾的多余符号
2019/11/19 Python
Python数据可视化常用4大绘图库原理详解
2020/10/23 Python
CSS3实现多背景展示效果通过CSS3定位多张背景
2014/08/10 HTML / CSS
Ralph Lauren英国官方网站:Ralph Lauren UK
2018/04/03 全球购物
ProBikeKit德国:在线公路自行车专家
2018/06/03 全球购物
Kusmi茶美国官网:优质散叶茶和茶包
2019/10/13 全球购物
工商管理专业学生的自我评价
2013/10/01 职场文书
岗位职责定义及内容
2013/11/08 职场文书
聚美优品广告词改编
2014/03/14 职场文书
保证书格式范文
2014/04/28 职场文书
医药公司采购员岗位职责
2014/09/12 职场文书
2015年行政工作总结范文
2015/04/09 职场文书
高中开学感言
2015/08/01 职场文书