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 相关文章推荐
jquery下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法
Oct 22 Javascript
Moment.js 不容错过的超棒Javascript日期处理类库
Apr 15 Javascript
jquery如何根据值设置默认的选中项
Mar 17 Javascript
跟我学习javascript的for循环和for...in循环
Nov 18 Javascript
jQuery实现为控件添加水印文字效果(附源码)
Dec 02 Javascript
jquery $.trim()去除字符串空格的实现方法【附图例】
Mar 30 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
May 24 Javascript
浅谈jQuery 选择器和dom操作
Jun 07 Javascript
JavaScript中清空数组的方法总结
Dec 02 Javascript
详解webpack异步加载业务模块
Jun 23 Javascript
vue实现动态按钮功能
May 13 Javascript
在Vue中使用icon 字体图标的方法
Jun 14 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 编程请选择正确的文本编辑软件
2006/12/21 PHP
用PHP生成html分页列表的代码
2007/03/18 PHP
PHP中实现中文字符进制转换原理分析
2011/12/06 PHP
Yii调试SQL的常用方法
2014/07/09 PHP
PHP防止图片盗用(盗链)的方法小结
2016/11/11 PHP
phpStudy配置多站点多域名和多端口的方法
2017/09/01 PHP
PHP实现防止表单重复提交功能【基于token验证】
2018/05/24 PHP
JavaScript触发器详解
2007/03/10 Javascript
JQuery onload、ready概念介绍及使用方法
2013/04/27 Javascript
JS获取浏览器语言动态加载JS文件示例代码
2014/10/31 Javascript
js的[defer]和[async]属性
2014/11/24 Javascript
学习JavaScript设计模式之责任链模式
2016/01/18 Javascript
JS原型、原型链深入理解
2016/02/27 Javascript
老生常谈的跨域处理
2017/01/11 Javascript
jQuery插件echarts去掉垂直网格线用法示例
2017/03/03 Javascript
深入理解Commonjs规范及Node模块实现
2017/05/17 Javascript
手动用webpack搭建第一个ReactApp的示例
2018/04/11 Javascript
dts文件中删除一个node或属性的操作方法
2018/08/05 Javascript
jquery获取select选中值的文本,并赋值给另一个输入框的方法
2018/08/21 jQuery
JS删除String里某个字符的方法
2021/01/06 Javascript
nuxt配置通过指定IP和端口访问的实现
2020/01/08 Javascript
批处理与python代码混合编程的方法
2016/05/19 Python
Django 前后台的数据传递的方法
2017/08/08 Python
python中的&amp;&amp;及||的实现示例
2019/08/07 Python
用Python写一个自动木马程序
2019/09/17 Python
python读文件的步骤
2019/10/08 Python
Python爬虫爬取Bilibili弹幕过程解析
2019/10/10 Python
Python多分支if语句的使用
2020/09/03 Python
科颜氏法国官网:Kiehl’s法国
2019/08/20 全球购物
新西兰购物网站:TheMarket NZ
2020/09/19 全球购物
十八届三中全会宣传方案
2014/02/21 职场文书
家电业务员岗位职责
2014/03/10 职场文书
党员倡议书
2015/01/19 职场文书
乡镇法制宣传日活动总结
2015/05/05 职场文书
教师培训简讯
2015/07/20 职场文书