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实现简单的省市区三级联动
May 14 Javascript
js实现文本框选中的方法
May 26 Javascript
JavaScript实现倒计时代码段Item1(非常实用)
Nov 03 Javascript
bootstrap日历插件datetimepicker使用方法
Dec 14 Javascript
jQuery密码强度验证控件使用详解
Jan 05 Javascript
bootstrap响应式表格实例详解
May 15 Javascript
js编写选项卡效果
May 23 Javascript
Node.js如何实现注册邮箱激活功能 (常见)
Jul 23 Javascript
vue绑定事件后获取绑定事件中的this方法
Sep 15 Javascript
基于jQuery实现可编辑的表格
Dec 11 jQuery
Vue中点击active并第一个默认选中功能的实现
Feb 24 Javascript
微信小程序自定义纯净模态框(弹出框)的实例代码
Mar 09 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
php array_map array_multisort 高效处理多维数组排序
2009/06/11 PHP
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
2014/01/30 PHP
php基于base64解码图片与加密图片还原实例
2014/11/03 PHP
php flush无效,IIS7下php实时输出的方法
2016/08/25 PHP
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
2010/03/23 Javascript
JS俄罗斯方块,包含完整的设计理念
2010/12/11 Javascript
Javascript玩转继承(二)
2014/05/08 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
2016/04/06 Javascript
完美解决jQuery符号$与其他javascript 库、框架冲突的问题
2016/08/09 Javascript
js防阻塞加载的实现方法
2016/09/09 Javascript
Angular.js实现注册系统的实例详解
2016/12/18 Javascript
JavaScript调试的多个必备小Tips
2017/01/15 Javascript
Vue 过渡实现轮播图效果
2017/03/27 Javascript
实现一个完整的Node.js RESTful API的示例
2017/09/29 Javascript
Javascript通过控制类名更改样式
2019/05/24 Javascript
基于openlayers实现角度测量功能
2020/09/28 Javascript
使用JavaScript实现贪吃蛇游戏
2020/09/29 Javascript
详解React中共享组件逻辑的三种方式
2021/02/02 Javascript
[02:12]2019完美世界全国高校联赛(春季赛)报名开启
2019/03/01 DOTA
简单学习Python多进程Multiprocessing
2017/08/29 Python
pycharm设置注释颜色的方法
2018/05/23 Python
python读写LMDB文件的方法
2018/07/02 Python
详解python的四种内置数据结构
2019/03/19 Python
python常见字符串处理函数与用法汇总
2019/10/30 Python
Python字典深浅拷贝与循环方式方法详解
2020/02/09 Python
给ubuntu18安装python3.7的详细教程
2020/06/08 Python
Python numpy矩阵处理运算工具用法汇总
2020/07/13 Python
在PyCharm中安装PaddlePaddle的方法
2021/02/05 Python
Python使用tkinter实现小时钟效果
2021/02/22 Python
CSS3混合模式mix-blend-mode/background-blend-mode简介
2018/03/15 HTML / CSS
Hotels.com印度:酒店预订
2019/05/11 全球购物
iostream与iostream.h的区别
2015/01/16 面试题
采购部部长岗位职责
2014/02/06 职场文书
户籍证明格式
2014/09/15 职场文书
公务员政审材料范文
2014/12/23 职场文书
Python代码实现双链表
2022/05/25 Python