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脚本复制网页上的一个表格的不错实现方法
Dec 29 Javascript
Js 代码中,ajax请求地址后加随机数防止浏览器缓存的原因
May 07 Javascript
jQuery弹簧插件编写基础之“又见弹窗”
Dec 11 Javascript
WebSocket+node.js创建即时通信的Web聊天服务器
Aug 08 Javascript
Javascript数组中push方法用法分析
Oct 31 Javascript
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
Dec 15 Javascript
jquery仿京东侧边栏导航效果
Mar 02 Javascript
jQuery实现点击关注和取消功能
Jul 03 jQuery
vue实现登陆登出的实现示例
Sep 15 Javascript
vue动态设置img的src路径实例
Sep 18 Javascript
JavaScript设计模式之代理模式实例分析
Jan 16 Javascript
记一次vue跨域的解决
Oct 21 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学习笔记之二
2011/01/17 PHP
PHP抽象类 介绍
2012/06/13 PHP
帝国CMS留言板回复后发送EMAIL通知客户
2015/07/06 PHP
百度地图经纬度转换到腾讯地图/Google 对应的经纬度
2015/08/28 PHP
php格式文件打开的四种方法
2018/02/24 PHP
javascript:history.go()和History.back()的区别及应用
2012/11/25 Javascript
JavaScript的作用域和块级作用域概念理解
2014/09/21 Javascript
JavaScript删除数组元素的方法
2015/03/20 Javascript
js实现的牛顿摆效果
2015/03/31 Javascript
jQuery实现响应鼠标事件的图片透明效果【附demo源码下载】
2016/06/16 Javascript
AngularJs bootstrap搭载前台框架——基础页面
2016/09/01 Javascript
浅谈vue,angular,react数据双向绑定原理分析
2017/11/28 Javascript
解决在vue项目中,发版之后,背景图片报错,路径不对的问题
2018/03/06 Javascript
深入理解Vue父子组件生命周期执行顺序及钩子函数
2018/08/12 Javascript
一文看懂如何简单实现节流函数和防抖函数
2019/09/05 Javascript
原生js实现表格循环滚动
2020/11/24 Javascript
[01:35:53]完美世界DOTA2联赛PWL S3 Magma vs GXR 第二场 12.13
2020/12/17 DOTA
python连接mysql数据库示例(做增删改操作)
2013/12/31 Python
在Python中使用__slots__方法的详细教程
2015/04/28 Python
python正则表达式的使用
2017/06/12 Python
python学习开发mock接口
2019/04/28 Python
Python 线程池用法简单示例
2019/10/02 Python
PIL.Image.open和cv2.imread的比较与相互转换的方法
2020/06/03 Python
python是怎么被发明的
2020/06/15 Python
html5利用canvas绘画二级树形结构图的示例
2017/09/27 HTML / CSS
HTML5视频支持检测(检查浏览器是否支持视频播放)
2013/06/08 HTML / CSS
国家地理在线商店:Shop National Geographic
2018/06/30 全球购物
给酒店员工的表扬信
2014/01/11 职场文书
建议书标准格式
2014/03/12 职场文书
满月酒主持词
2014/03/27 职场文书
孝老爱亲事迹材料
2014/12/24 职场文书
2015年考研复习计划
2015/01/19 职场文书
社区工作者个人总结
2015/02/28 职场文书
2015年打非治违工作总结
2015/04/02 职场文书
篮球赛新闻稿
2015/07/17 职场文书
如何开启Apache,Nginx和IIS服务器的GZIP压缩功能
2022/04/29 Servers