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中instanceof与typeof运算符的用法及区别详细解析
Nov 19 Javascript
JS中判断null、undefined与NaN的方法
Mar 24 Javascript
jquery实现初次打开有动画效果的网页TAB切换代码
Sep 06 Javascript
jQuery获取单击节点对象的方法
Jun 02 Javascript
jQuery实现的纵向下拉菜单实例详解【附demo源码下载】
Jul 09 Javascript
AngularJS实现数据列表的增加、删除和上移下移等功能实例
Sep 05 Javascript
使用vue.js实现checkbox的全选和多个的删除功能
Feb 17 Javascript
利用HBuilder打包前端开发webapp为apk的方法
Nov 13 Javascript
详解vue 在移动端体验上的优化解决方案
May 20 Javascript
微信小程序wepy框架学习和使用心得详解
May 24 Javascript
laypage.js分页插件使用方法详解
Jul 27 Javascript
vue点击自增和求和的实例代码
Nov 06 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
基于文本的搜索
2006/10/09 PHP
php判断是否连接上网络的方法实例详解
2016/12/14 PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
2017/04/05 PHP
PHP抽象类与接口的区别详解
2019/03/21 PHP
Javascript 解疑
2009/11/11 Javascript
关于jquery的多个选择器的使用示例
2013/10/18 Javascript
jQuery实现带延迟效果的滑动菜单代码
2015/09/02 Javascript
Bootstrap每天必学之进度条
2015/11/30 Javascript
浅谈javascript中的constructor
2016/06/08 Javascript
js Canvas实现圆形时钟教程
2016/09/19 Javascript
手机端js和html5刮刮卡效果
2020/09/29 Javascript
微信小程序模板之分页滑动栏
2017/02/10 Javascript
微信小程序图片自适应支持多图实例详解
2017/06/21 Javascript
angularjs $http调用接口的方式详解
2018/08/13 Javascript
如何使用pm2快速将项目部署到远程服务器
2019/03/12 Javascript
Vue2.0实现组件之间数据交互和通信操作示例
2019/05/16 Javascript
解决vue使用vant下拉框van-dropdown-item 绑定title值不变问题
2020/08/05 Javascript
Python函数式编程
2017/07/20 Python
Django高级编程之自定义Field实现多语言
2019/07/02 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
2019/08/30 Python
python3实现在二叉树中找出和为某一值的所有路径(推荐)
2019/12/26 Python
tensorflow使用L2 regularization正则化修正overfitting过拟合方式
2020/05/22 Python
Python 实现简单的客户端认证
2020/07/29 Python
使用html5制作loading图的示例
2014/04/14 HTML / CSS
检查接待方案
2014/02/27 职场文书
产品销售计划书
2014/05/04 职场文书
六查六看剖析材料
2014/10/06 职场文书
流动人口婚育证明
2014/10/19 职场文书
大学生助学金感谢信
2015/01/21 职场文书
2015年新学期寄语
2015/02/26 职场文书
2015年女职工工作总结
2015/05/15 职场文书
用电申请报告范文
2015/05/18 职场文书
田径运动会广播稿
2015/08/19 职场文书
Python机器学习之KNN近邻算法
2021/05/14 Python
一文弄懂MySQL索引创建原则
2022/02/28 MySQL
JS开发前端团队展示控制器来为成员引流
2022/08/14 Javascript