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 相关文章推荐
Array.prototype 的泛型应用分析
Apr 30 Javascript
jQuery移动和复制dom节点实用DOM操作案例
Dec 17 Javascript
关于js遍历表格的实例
Jul 10 Javascript
jQuery 写的简单打字游戏可以提示正确和错误的次数
Jul 01 Javascript
浅谈Javascript中深复制
Dec 01 Javascript
Node.js中JavaScript操作MySQL的常用方法整理
Mar 01 Javascript
JavaScript的instanceof运算符学习教程
Jun 08 Javascript
zTree jQuery 树插件的使用(实例讲解)
Sep 25 jQuery
scrapyd schedule.json setting 传入多个值问题
Aug 07 Javascript
使用 Angular RouteReuseStrategy 缓存(路由)组件的实例代码
Nov 01 Javascript
使用React代码动态生成栅格布局的方法
May 24 Javascript
vue引入静态js文件的方法
Jun 20 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 feof用来识别文件末尾字符的方法
2010/08/01 PHP
php加水印的代码(支持半透明透明打水印,支持png透明背景)
2013/01/17 PHP
phpQuery让php处理html代码像jQuery一样方便
2015/01/06 PHP
PHP 实现判断用户是否手机访问
2015/01/21 PHP
php实现用手机关闭计算机(电脑)的方法
2015/04/22 PHP
Yii2 加载css、js 载静态资源的方法
2017/03/10 PHP
thinkPHP事务操作简单案例分析
2019/10/17 PHP
通过身份证号得到出生日期和性别的js代码
2009/11/23 Javascript
基于Jquery的文字滚动跑马灯插件(一个页面多个滚动区)
2010/07/26 Javascript
基于jquery的web页面日期格式化插件
2011/11/15 Javascript
用JavaScript仿PS里的羽化效果代码
2011/12/20 Javascript
js打开新窗口方法整理
2014/02/17 Javascript
jquery-tips悬浮提示插件分享
2015/07/31 Javascript
详解Node.js开发中的express-session
2017/05/19 Javascript
vue的style绑定background-image的方式和其他变量数据的区别详解
2018/09/03 Javascript
微信小程序实现图片压缩
2019/12/03 Javascript
[00:15]TI9地铁玩家打卡
2019/08/11 DOTA
Python 字典dict使用介绍
2014/11/30 Python
Python之str操作方法(详解)
2017/06/19 Python
Python读取MRI并显示为灰度图像实例代码
2018/01/03 Python
Python线程之定位与销毁的实现
2019/02/17 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
python小白切忌乱用表达式
2020/05/29 Python
购买澳大利亚最好的服装和内衣在线:BONDS
2016/10/14 全球购物
康帕斯酒店预订:Compass Hospitality(支持中文)
2018/08/23 全球购物
佳能法国商店:Canon法国
2019/02/14 全球购物
女大学生毕业找工作的自我评价
2013/10/03 职场文书
业务员薪酬管理制度
2014/01/15 职场文书
致400米运动员广播稿
2014/02/07 职场文书
党的群众路线对照检查材料思想汇报(学校)
2014/10/04 职场文书
工伤事故赔偿协议书
2014/10/27 职场文书
2015年药房工作总结
2015/04/25 职场文书
2015年社区精神文明工作总结
2015/05/26 职场文书
css3实现的加载动画效果
2021/04/07 HTML / CSS
浅谈Go语言多态的实现与interface使用
2021/06/16 Golang
使用ICOM IC-R9500接收机同时测评十台收音机中波接收性能
2022/05/10 无线电