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 相关文章推荐
js 中的switch表达式使用示例
Jun 03 Javascript
jquery parent和parents的区别分析
Oct 02 Javascript
浅谈jQuery构造函数分析
May 11 Javascript
jquery实现选中单选按钮下拉伸缩效果
Aug 06 Javascript
JavaScript实现字符串与日期的互相转换及日期的格式化
Mar 07 Javascript
Angularjs CURD 详解及实例代码
Sep 14 Javascript
jQuery 实现鼠标画框并对框内数据选中的实例代码
Aug 29 jQuery
seaJs使用心得之exports与module.exports的区别实例分析
Oct 13 Javascript
解决修复npm安装全局模块权限的问题
May 17 Javascript
详解mpvue小程序中怎么引入iconfont字体图标
Oct 01 Javascript
node.js处理前端提交的GET请求
Aug 30 Javascript
bootstrap-closable-tab可实现关闭的tab标签页插件
Aug 09 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防注入安全代码
2008/04/09 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
2016/04/11 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
2017/04/18 PHP
PHP基于接口技术实现简单的多态应用完整实例
2017/04/26 PHP
thinkPHP框架实现的短信接口验证码功能示例
2018/06/20 PHP
PHP 爬取网页的主要方法
2018/07/13 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
2021/03/09 PHP
JavaScript DOM学习第六章 表单实例
2010/02/19 Javascript
jQuery.prototype.init选择器构造函数源码思路分析
2013/02/05 Javascript
JQUERY对单选框(radio)操作的小例子
2013/04/25 Javascript
点击页面其它地方隐藏该div的两种思路
2013/11/18 Javascript
js 去掉空格实例 Trim() LTrim() RTrim()
2014/01/07 Javascript
NodeJS学习笔记之FS文件模块
2015/01/13 NodeJs
jquery实现上下左右滑动的方法
2015/02/09 Javascript
jQuery实现手机号码输入提示功能实例
2015/04/30 Javascript
js同源策略详解
2015/05/21 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
2016/02/26 Javascript
深入学习AngularJS中数据的双向绑定机制
2016/03/04 Javascript
谈谈PHP中相对路径的问题与绝对路径的使用
2016/08/16 Javascript
Bootstrap页面标题Page Header的实现方法
2017/03/22 Javascript
React父子组件间的传值的方法
2018/11/13 Javascript
微信小程序实现简单评论功能
2018/11/28 Javascript
javascript canvas封装动态时钟
2020/09/30 Javascript
python查询mysql中文乱码问题
2014/11/09 Python
在Python中使用mongoengine操作MongoDB教程
2015/04/24 Python
Python多进程multiprocessing用法实例分析
2017/08/18 Python
python使用tornado实现登录和登出
2018/07/28 Python
django框架使用方法详解
2019/07/18 Python
在python里使用await关键字来等另外一个协程的实例
2020/05/04 Python
JD Sports瑞典:英国领先的运动时尚商店
2018/01/28 全球购物
Marc O’Polo俄罗斯官方在线商店:德国高端时尚品牌
2019/12/26 全球购物
Python爬虫数据的分类及json数据使用小结
2021/03/29 Python
pandas中对文本类型数据的处理小结
2021/11/01 Python
Nginx+Windows搭建域名访问环境的操作方法
2022/03/17 Servers
Apache Hudi集成Spark SQL操作hide表
2022/03/31 Servers
Python实现聚类K-means算法详解
2022/07/15 Python