javascript函数作用域学习示例(js作用域)


Posted in Javascript onJanuary 13, 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 相关文章推荐
javascript比较文档位置
Apr 08 Javascript
举例详解AngularJS中ngShow和ngHide的使用方法
Jun 19 Javascript
javascript中的Function.prototye.bind
Jun 25 Javascript
探寻JavaScript中this指针指向
Apr 23 Javascript
如何在Angular2中使用jQuery及其插件的方法
Feb 09 Javascript
js前端日历控件(悬浮、拖拽、自由变形)
Mar 02 Javascript
使用JS动态显示文本
Sep 09 Javascript
JavaScript判断变量名是否存在数组中的实例
Dec 28 Javascript
解决layui 复选框等内置控件不显示的问题
Aug 14 Javascript
vue实现局部刷新的实现示例
Apr 16 Javascript
Vue混入mixins滚动触底的方法
Nov 22 Javascript
vue和H5 draggable实现拖拽并替换效果
Jul 29 Javascript
多选列表框动态添加,移动,删除,全选等操作的简单实例
Jan 13 #Javascript
鼠标经过tr时,改变tr当前背景颜色
Jan 13 #Javascript
js导航栏单击事件背景变换示例代码
Jan 13 #Javascript
JS文本获得焦点清除文本文字的示例代码
Jan 13 #Javascript
javascript间隔定时器(延时定时器)学习 间隔调用和延时调用
Jan 13 #Javascript
parentElement,srcElement的使用小结
Jan 13 #Javascript
javaScript中的this示例学习详解及工作原理
Jan 13 #Javascript
You might like
PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
2012/07/15 PHP
php站内搜索关键词变亮的实现方法
2014/12/30 PHP
PHP二维数组矩形转置实例
2016/07/20 PHP
Zend Framework路由器用法实例详解
2016/12/11 PHP
区分JS中的undefined,null,&quot;&quot;,0和false
2007/03/08 Javascript
JavaScript 匿名函数(anonymous function)与闭包(closure)
2011/10/04 Javascript
基于jquery实现的一个选择中国大学的弹框 (数据、步骤、代码)
2012/07/26 Javascript
基于jquery异步传输json数据格式实例代码
2013/11/23 Javascript
对Web开发中前端框架与前端类库的一些思考
2015/03/27 Javascript
jQuery使用animate创建动画用法实例
2015/08/07 Javascript
Bootstrap每天必学之导航条
2015/11/27 Javascript
JavaScript实现弹出模态窗体并接受传值的方法
2016/02/12 Javascript
深入理解jQuery之防止冒泡事件
2016/05/24 Javascript
谈谈jQuery之Deferred源码剖析
2016/12/19 Javascript
基于jQuery封装的分页组件
2017/06/26 jQuery
vue Render中slots的使用的实例代码
2017/07/19 Javascript
利用vue和element-ui设置表格内容分页的实例
2018/03/02 Javascript
浅析vue插槽和作用域插槽的理解
2019/04/22 Javascript
JS回调函数深入理解
2019/10/16 Javascript
[04:28]DOTA2亚洲邀请赛小组赛第五日 TOP10精彩集锦
2015/02/03 DOTA
Python minidom模块用法示例【DOM写入和解析XML】
2019/03/25 Python
python程序控制NAO机器人行走
2019/04/29 Python
Python对接支付宝支付自实现功能
2019/10/10 Python
Pytorch自己加载单通道图片用作数据集训练的实例
2020/01/18 Python
HTML5之多线程(Web Worker)
2019/01/02 HTML / CSS
浅谈HTML5新增和废弃的标签
2019/04/28 HTML / CSS
如果有两个类A,B,怎么样才能使A在发生一个事件的时候通知B
2016/03/12 面试题
销售自荐信
2013/10/22 职场文书
狼和鹿教学反思
2014/02/05 职场文书
2014年十一国庆节活动方案
2014/09/16 职场文书
岳麓书院导游词
2015/02/03 职场文书
团组织关系介绍信
2019/06/24 职场文书
python实战之90行代码写个猜数字游戏
2021/04/22 Python
nginx 添加http_stub_status_module模块
2022/05/25 Servers
如何利用python实现列表嵌套字典取值
2022/06/10 Python