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 相关文章推荐
JS JavaScript获取Url参数,src属性参数
Mar 09 Javascript
js通过iframe加载外部网页的实现代码
Apr 05 Javascript
Node.js中使用jQuery的做法
Aug 17 Javascript
easyUI combobox实现联动效果
Jan 17 Javascript
使用jQuery的load方法设计动态加载及解决被加载页面js失效问题
Mar 01 Javascript
JavaScript之RegExp_动力节点Java学院整理
Jun 29 Javascript
使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
Jan 25 jQuery
微信小程序实现两边小中间大的轮播效果的示例代码
Dec 07 Javascript
JS栈stack类的实现与使用方法示例
Jan 31 Javascript
微信小程序云开发之新手环境配置
May 16 Javascript
vue 实现通过vuex 存储值 在不同界面使用
Nov 11 Javascript
Vue Element校验validate的实例
Sep 21 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和Shell实现检查SAMBA与NFS Server是否存在
2015/01/07 PHP
Yii获取当前url和域名的方法
2015/06/08 PHP
PHP实现连接设备、通讯和发送命令的方法
2015/10/13 PHP
你的编程语言可以这样做吗?
2006/09/07 Javascript
Javascript学习笔记8 用JSON做原型
2010/01/11 Javascript
javascript开发技术大全-第3章 js数据类型
2011/07/03 Javascript
JavaScript 的继承
2011/10/01 Javascript
jQuery自定义事件的简单实现代码
2014/01/27 Javascript
javasciprt下jquery函数$.post执行无响应的解决方法
2014/03/13 Javascript
js实现回放拖拽轨迹从过程上进行分析
2014/06/26 Javascript
javascript创建动态表单的方法
2015/07/25 Javascript
jQuery仿淘宝网产品品牌隐藏与显示效果
2015/09/01 Javascript
jQuery页面加载初始化的3种方法(推荐)
2016/06/02 Javascript
ECMAScript6快速入手攻略
2016/07/18 Javascript
js获取页面引用的css样式表中的属性值方法(推荐)
2016/08/19 Javascript
浅析javascript中的Event事件
2016/12/09 Javascript
vue用addRoutes实现动态路由的示例
2017/09/15 Javascript
使用vue-router与v-if实现tab切换遇到的问题及解决方法
2018/09/07 Javascript
React Router V4使用指南(精讲)
2018/09/17 Javascript
vue 插件的方法代码详解
2019/06/06 Javascript
JavaScript实现图片轮播特效
2019/10/23 Javascript
JavaScript中break、continue和return的用法区别实例分析
2020/03/02 Javascript
JavaScript中变量提升和函数提升的详解
2020/08/07 Javascript
在Python中操作字符串之replace()方法的使用
2015/05/19 Python
Python3一行代码实现图片文字识别的示例
2018/01/15 Python
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
2019/02/12 Python
关于阿里云oss获取sts凭证 app直传 python的实例
2019/08/20 Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
2020/03/26 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
2021/01/12 Python
Python 转移文件至云对象存储的方法
2021/02/07 Python
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
2014年元旦活动方案
2014/02/15 职场文书
跑操口号
2014/06/12 职场文书
反对邪教标语
2014/06/30 职场文书
如何写好活动总结
2019/06/21 职场文书
python内置模块之上下文管理contextlib
2022/06/14 Python