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 相关文章推荐
Some tips of wmi scripting in jscript (1)
Apr 03 Javascript
firefox下对ajax的onreadystatechange的支持情况分析
Dec 14 Javascript
简洁短小的 JavaScript IE 浏览器判定代码
Mar 21 Javascript
为jQuery添加Webkit的触摸的方法分享
Feb 02 Javascript
减少访问DOM的次数提升javascript性能
Feb 24 Javascript
fixedBox固定div漂浮代码支持ie6以上大部分主流浏览器
Jun 26 Javascript
浅谈js里面的InttoStr和StrtoInt
Jun 14 Javascript
javascirpt实现2个iframe之间传值的方法
Jun 30 Javascript
self.attachevent is not a function的解决方法
Apr 04 Javascript
完美解决浏览器跨域的几种方法(汇总)
May 08 Javascript
vue.js动画中的js钩子函数的实现
Jul 06 Javascript
微信小程序动态增加按钮组件
Sep 14 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
一个改进的UBB类
2006/10/09 PHP
PHP字符串中特殊符号的过滤方法介绍
2014/02/18 PHP
php中ob函数缓冲机制深入理解
2015/08/03 PHP
js动态调用css属性的小规律及实例说明
2013/12/28 Javascript
JavaScript类属性的访问方式详解
2014/02/11 Javascript
浅谈JavaScript中的对象及Promise对象的实现
2015/11/15 Javascript
详谈$.data()的用法和作用
2017/02/13 Javascript
微信小程序 基础组件与导航组件详细介绍
2017/02/21 Javascript
基于代数方程库Algebra.js解二元一次方程功能示例
2017/06/09 Javascript
JS中Safari浏览器中的Date
2017/07/17 Javascript
vue router下的html5 history在iis服务器上的设置方法
2017/10/18 Javascript
微信小程序实现选项卡功能
2020/06/19 Javascript
Vue cli构建及项目打包以及出现的问题解决
2018/08/27 Javascript
详解使用angular框架离线你的应用(pwa指南)
2019/01/31 Javascript
JavaScript实现简单计算器功能
2019/12/19 Javascript
node.JS二进制操作模块buffer对象使用方法详解
2020/02/06 Javascript
JavaScript设计模式--简单工厂模式实例分析【XHR工厂案例】
2020/05/23 Javascript
vue在图片上传的时候压缩图片
2020/11/18 Vue.js
[02:52]DOTA2新手基础教程 米波
2014/01/21 DOTA
python打开网页和暂停实例
2014/09/30 Python
Python原始字符串(raw strings)用法实例
2014/10/13 Python
实例讲解Python设计模式编程之工厂方法模式的使用
2016/03/02 Python
python numpy格式化打印的实例
2018/05/14 Python
Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例
2019/01/23 Python
深入解析python中的实例方法、类方法和静态方法
2019/03/11 Python
python标准库sys和OS的函数使用方法与实例详解
2020/02/12 Python
python函数map()和partial()的知识点总结
2020/05/26 Python
Python识别处理照片中的条形码
2020/11/16 Python
解决python3.x安装numpy成功但import出错的问题
2020/11/17 Python
马来西亚最大的在线隐形眼镜商店:MrLens
2019/03/27 全球购物
暑期实践思想汇报
2014/01/06 职场文书
cf收人广告词
2014/03/14 职场文书
大学生实习鉴定评语
2014/04/25 职场文书
教师读书活动心得体会
2016/01/14 职场文书
二年级作文之动物作文
2019/11/13 职场文书
Python中Permission denied的解决方案
2021/04/02 Python