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 面向对象思想 附源码
Jul 07 Javascript
怎么清空javascript数组
May 11 Javascript
JavaScript中创建类/对象的几种方法总结
Nov 29 Javascript
单击和双击事件的冲突处理示例代码
Apr 03 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
Jun 24 Javascript
url中的特殊符号有什么含义(推荐)
Jun 17 Javascript
js实现砖头在页面拖拉效果
Nov 20 Javascript
Node.js pipe实现源码解析
Aug 12 Javascript
JS库之Particles.js中文开发手册及参数详解
Sep 13 Javascript
webpack将js打包后的map文件详解
Feb 22 Javascript
node thread.sleep实现示例
Jun 20 Javascript
vue 实现把路由单独分离出来
Aug 13 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
PHP4和PHP5共存于一系统
2006/11/17 PHP
apache中为php 设置虚拟目录
2014/12/17 PHP
PHP字典树(Trie树)定义与实现方法示例
2017/10/09 PHP
改进:论坛UBB代码自动插入方式
2006/12/22 Javascript
Javascript Select操作大集合
2009/05/26 Javascript
JavaScript 基础篇之对象、数组使用介绍(三)
2012/04/07 Javascript
js iframe跨域访问(同主域/非同主域)分别深入介绍
2013/01/24 Javascript
基于jQuery选择器的整理集合
2013/04/26 Javascript
jquery获取一组checkbox的值(实例代码)
2013/11/04 Javascript
JavaScript检查弹出窗口是否被阻拦的方法技巧
2015/03/13 Javascript
JS判断输入字符串长度实例代码(汉字算两个字符,字母数字算一个)
2016/08/02 Javascript
基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
2016/10/30 Javascript
原生js实现水平方向无缝滚动
2017/01/10 Javascript
深入理解Javascript中的观察者模式
2017/02/20 Javascript
Vue-Quill-Editor富文本编辑器的使用教程
2018/09/21 Javascript
vue elementui form表单验证的实现
2018/11/11 Javascript
JQuery 实现文件下载的常用方法分析
2019/10/29 jQuery
[05:37]DOTA2-DPC中国联赛 正赛 Elephant vs iG 选手采访
2021/03/11 DOTA
python进阶教程之词典、字典、dict
2014/08/29 Python
python多线程socket编程之多客户端接入
2017/09/12 Python
Django的HttpRequest和HttpResponse对象详解
2018/01/26 Python
django使用xlwt导出excel文件实例代码
2018/02/06 Python
Windows 8.1 64bit下搭建 Scrapy 0.22 环境
2018/11/18 Python
详解Python with/as使用说明
2018/12/13 Python
python FTP批量下载/删除/上传实例
2019/12/22 Python
Python简单实现区域生长方式
2020/01/16 Python
Python matplotlib 绘制双Y轴曲线图的示例代码
2020/06/12 Python
如何Tkinter模块编写Python图形界面
2020/10/14 Python
python实现定时发送邮件
2020/12/23 Python
基于CSS3实现图片模糊过滤效果
2015/11/19 HTML / CSS
盛大二次面试题
2016/11/18 面试题
助人为乐表扬信范文
2014/01/14 职场文书
党员年度个人总结
2015/02/14 职场文书
2016入党积极分子考察评语
2015/12/01 职场文书
详解Python描述符的工作原理
2021/06/11 Python
Window server 2012 R2 AD域的组策略相关设置
2022/04/28 Servers