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 相关文章推荐
jQuery ajax在GBK编码下表单提交终极解决方案(非二次编码方法)
Oct 20 Javascript
javascript 使td内容不换行不撑开
Nov 29 Javascript
让AJAX不依赖后端接口实现方案
Dec 03 Javascript
javascript计算用户打开网页的停留时间
Jan 09 Javascript
NODE.JS加密模块CRYPTO常用方法介绍
Jun 05 Javascript
js实现Form栏显示全格式时间时钟效果代码
Aug 19 Javascript
JavaScript多图片上传案例
Sep 28 Javascript
jQuery实现的分子运动小球碰撞效果
Jan 27 Javascript
Bootstrap里的文件分别代表什么意思及其引用方法
May 01 Javascript
javascript 中select框触发事件过程的分析
Aug 01 Javascript
element 结合vue 在表单验证时有值却提示错误的解决办法
Jan 22 Javascript
巧妙运用v-model实现父子组件传值的方法示例
Apr 07 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,ajax实现分页
2008/03/27 PHP
递归删除一个节点以及该节点下的所有节点示例
2014/03/19 PHP
PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别
2014/11/20 PHP
PHP SPL标准库之SplFixedArray使用实例
2015/05/12 PHP
PHP strip_tags() 去字符串中的 HTML、XML 以及 PHP 标签的函数
2016/05/22 PHP
jQuery动画效果-fadeIn fadeOut淡入浅出示例代码
2013/08/28 Javascript
AngularJS包括详解及示例代码
2016/08/17 Javascript
简单实现js菜单栏切换效果
2017/03/04 Javascript
vue-router 导航钩子的具体使用方法
2017/08/31 Javascript
Vue.js项目模板搭建图文教程
2017/09/20 Javascript
vue axios同步请求解决方案
2017/09/29 Javascript
详解Vue开发微信H5微信分享签名失败问题解决方案
2018/08/09 Javascript
详解React之key的使用和实践
2018/09/29 Javascript
在 Vue-CLI 中引入 simple-mock实现简易的 API Mock 接口数据模拟
2018/11/28 Javascript
vue跳转同一个组件,参数不同,页面接收值只接收一次的解决方法
2019/11/05 Javascript
es6函数之严格模式用法实例分析
2020/03/17 Javascript
详细分析vue响应式原理
2020/06/22 Javascript
openlayers4.6.5实现距离量测和面积量测
2020/09/25 Javascript
JavaScript实现页面高亮操作提示和蒙板
2021/01/04 Javascript
[43:41]OG vs Newbee 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
Python实现的密码强度检测器示例
2017/08/23 Python
Python去除字符串前后空格的几种方法
2019/03/04 Python
django框架事务处理小结【ORM 事务及raw sql,customize sql 事务处理】
2019/06/27 Python
Python批量修改图片分辨率的实例代码
2019/07/04 Python
django 实现将本地图片存入数据库,并能显示在web上的示例
2019/08/07 Python
python错误调试及单元文档测试过程解析
2019/12/19 Python
Python编程快速上手——选择性拷贝操作案例分析
2020/02/28 Python
土耳其新趋势女装购物网站:Addax
2020/01/07 全球购物
vue 中 get / delete 传递数组参数方法
2021/03/23 Vue.js
成教自我鉴定
2013/10/27 职场文书
三八妇女节活动主持词
2014/03/17 职场文书
高中生班主任评语
2014/04/25 职场文书
2014年质检工作总结
2014/11/26 职场文书
小学教师个人总结
2015/02/05 职场文书
2015年党务公开工作总结
2015/05/19 职场文书
CSS link与@import的区别和用法解析
2023/05/07 HTML / CSS