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 相关文章推荐
Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
Mar 12 Javascript
window.event快达到全浏览器支持了,以后使用就方便了
Nov 30 Javascript
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
Apr 08 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
Jan 08 Javascript
JS模拟bootstrap下拉菜单效果实例
Jun 17 Javascript
使用Webpack提高Vue.js应用的方式汇总(四种)
Jul 10 Javascript
最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
Aug 16 Javascript
微信小程序实现自动定位功能
Oct 31 Javascript
详解VUE前端按钮权限控制
Apr 26 Javascript
vuex刷新后数据丢失的解决方法
Oct 18 Javascript
js实现电灯开关效果
Jan 19 Javascript
Vue3如何理解ref toRef和toRefs的区别
Feb 18 Vue.js
浅析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
咖啡店都有些什么常规豆子呢?有什么风味在里面
2021/03/04 咖啡文化
在任意字符集下正常显示网页的方法一
2007/04/01 PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
2014/07/25 PHP
使用Appcan客户端自动更新PHP版本号(全)
2015/07/31 PHP
PHP程序员学习使用Swoole的理由
2018/06/24 PHP
PHP实现的ID混淆算法类与用法示例
2018/08/10 PHP
JavaScript的Cookies
2008/01/16 Javascript
ext combox 下拉框不出现自动提示,自动选中的解决方法
2010/02/24 Javascript
javascript自执行函数之伪命名空间封装法
2010/12/25 Javascript
JS高级调试技巧:捕获和分析 JavaScript Error详解
2014/03/16 Javascript
我的Node.js学习之路(一)
2014/07/06 Javascript
javascript格式化指定日期对象的方法
2015/04/21 Javascript
javascript中for/in循环及使用技巧
2015/09/01 Javascript
jQuery实现的登录浮动框效果代码
2015/09/26 Javascript
JS+CSS相对定位实现的下拉菜单
2015/10/06 Javascript
实现JavaScript高性能的数据存储
2016/12/11 Javascript
jQuery实现简单的计时器功能实例分析
2017/08/29 jQuery
JavaScript原生实现观察者模式的示例
2017/12/15 Javascript
浅谈在node.js进入文件目录的问题
2018/05/13 Javascript
vuex的module模块用法示例
2018/11/12 Javascript
Angular利用HTTP POST下载流文件的步骤记录
2020/07/26 Javascript
Element Backtop回到顶部的具体使用
2020/07/27 Javascript
[01:08]DOTA2次级职业联赛 - Shield战队宣传片
2014/12/01 DOTA
在Django的视图中使用数据库查询的方法
2015/07/16 Python
详解Python读取配置文件模块ConfigParser
2017/05/11 Python
Python 使用PIL numpy 实现拼接图片的示例
2018/05/08 Python
python统计字母、空格、数字等字符个数的实例
2018/06/29 Python
Ubuntu18.04安装 PyCharm并使用 Anaconda 管理的Python环境
2020/04/08 Python
python编写一个会算账的脚本的示例代码
2020/06/02 Python
什么是python的函数体
2020/06/19 Python
初中生学习的自我评价
2013/11/14 职场文书
大学英语专业求职信
2014/06/21 职场文书
2014年度考核工作总结
2014/12/24 职场文书
小学班主任评语
2014/12/29 职场文书
病假证明模板
2015/06/19 职场文书
创业计划书介绍
2019/04/24 职场文书