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 相关文章推荐
JavaScript中document对象使用详解
Jan 06 Javascript
JS验证邮件地址格式方法小结
Dec 01 Javascript
AngularJS向后端ASP.NET API控制器上传文件
Feb 03 Javascript
AngularJS入门教程之AngularJS指令
Apr 18 Javascript
使用smartupload组件实现jsp+jdbc上传下载文件实例解析
Jan 05 Javascript
jQuery中 DOM节点操作方法大全
Oct 12 jQuery
基于vue 添加axios组件,解决post传参数为null的问题
Mar 05 Javascript
微信小程序:数据存储、传值、取值详解
May 07 Javascript
详解Vue3 Composition API中的提取和重用逻辑
Apr 29 Javascript
如何基于jQuery实现五角星评分
Sep 02 jQuery
JavaScript实现HTML导航栏下拉菜单
Nov 25 Javascript
js正则表达式简单校验方法
Jan 03 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
自编函数解决pathinfo()函数处理中文问题
2014/11/03 PHP
分享10段PHP常用代码
2015/11/11 PHP
学习php设计模式 php实现工厂模式(factory)
2015/12/07 PHP
php mongodb操作类 带几个简单的例子
2016/08/25 PHP
php实现背景图上添加圆形logo图标的方法
2016/11/17 PHP
PHP 500报错的快速解决方法
2016/12/14 PHP
Jquery Validation插件防止重复提交表单的解决方法
2010/03/05 Javascript
js里的prototype使用示例
2010/11/19 Javascript
实现只能输入数字的input不用replace方法
2013/09/12 Javascript
node.js中的fs.realpath方法使用说明
2014/12/16 Javascript
jquery实现的树形目录实例
2015/06/26 Javascript
js与jquery正则验证电子邮箱、手机号、邮政编码的方法
2016/07/04 Javascript
ionic2 tabs使用 Modal底部tab弹出框
2016/12/30 Javascript
JavaScript提高加载和执行效率的方法
2017/02/03 Javascript
Node.js常用工具之util模块
2017/03/09 Javascript
JS正则替换去空格的方法
2017/03/24 Javascript
node将geojson转shp返回给前端的实现方法
2019/05/29 Javascript
Vue中的transition封装组件的实现方法
2019/08/13 Javascript
继承行为在 ES5 与 ES6 中的区别详解
2019/12/24 Javascript
Python3实现从指定路径查找文件的方法
2015/05/22 Python
Python实现的计算器功能示例
2018/04/26 Python
python3实现163邮箱SMTP发送邮件
2018/05/22 Python
将string类型的数据类型转换为spark rdd时报错的解决方法
2019/02/18 Python
python基于socket实现的UDP及TCP通讯功能示例
2019/11/01 Python
安装PyInstaller失败问题解决
2019/12/14 Python
英国蜡烛、蜡烛配件和家居香氛购买网站:Yankee Candle
2018/12/12 全球购物
超级搞笑检讨书
2014/01/15 职场文书
面试通知单大全
2015/04/20 职场文书
办公室禁烟通知
2015/04/23 职场文书
会议简讯范文
2015/07/20 职场文书
公司酒会致辞
2015/07/30 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers
OpenCV-Python实现图像平滑处理操作
2021/06/08 Python
MySQL Server 层四个日志
2022/03/31 MySQL
Java设计模式中的命令模式
2022/04/28 Java/Android
tomcat默认最大连接数及相关调整方法
2022/05/06 Servers