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 相关文章推荐
ExtJS 2.0实用简明教程 之Border区域布局
Apr 29 Javascript
document.forms[].submit()使用介绍
Feb 19 Javascript
JavaScript判断是否为数组的3种方法及效率比较
Apr 01 Javascript
javascript日期处理函数,性能优化批处理
Sep 06 Javascript
jQuery.Validate表单验证插件的使用示例详解
Jan 04 Javascript
JS监控关闭浏览器操作的实例详解
Sep 12 Javascript
Vue二次封装axios为插件使用详解
May 21 Javascript
关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)
Sep 04 Javascript
小程序云开发实战小结
Oct 25 Javascript
JS重学系列之聊聊new操作符
Mar 04 Javascript
解决Vue大括号字符换行踩的坑
Nov 09 Javascript
Vue Element plus使用方法梳理
Dec 24 Vue.js
多选列表框动态添加,移动,删除,全选等操作的简单实例
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
dede3.1分页文字采集过滤规则详说(图文教程)续二
2007/04/03 PHP
php下批量挂马和批量清马代码
2011/02/27 PHP
ThinkPHP添加更新标签的方法
2014/12/05 PHP
PHP 文件上传后端处理实用技巧方法
2017/01/06 PHP
PHP实现微信提现(企业付款到零钱)
2019/08/01 PHP
字符串的replace方法应用浅析
2011/12/06 Javascript
只需一行代码,轻松实现一个在线编辑器
2013/11/12 Javascript
JavaScript中的eval()函数使用介绍
2014/12/31 Javascript
JS选项卡动态替换banner图片路径的方法
2015/05/11 Javascript
基于jquery实现无限级树形菜单
2016/03/22 Javascript
AngularJS中directive指令使用之事件绑定与指令交互用法示例
2016/11/22 Javascript
php 修改密码实现代码
2017/05/24 Javascript
vue+iview写个弹框的示例代码
2017/12/05 Javascript
使用webpack打包koa2 框架app
2018/02/02 Javascript
JQuery模拟实现网页中自定义鼠标右键菜单功能
2018/11/14 jQuery
JavaScript解析及序列化JSON的方法实例分析
2019/01/04 Javascript
ant design 日期格式化的实现
2020/10/27 Javascript
[01:13:59]LGD vs Mineski Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
Python-嵌套列表list的全面解析
2016/06/08 Python
Python实现一个转存纯真IP数据库的脚本分享
2017/05/21 Python
Python中表示字符串的三种方法
2017/09/06 Python
Python使用ConfigParser模块操作配置文件的方法
2018/06/29 Python
python实现在图片上画特定大小角度矩形框
2018/10/24 Python
Django框架设置cookies与获取cookies操作详解
2019/05/27 Python
python的pytest框架之命令行参数详解(下)
2019/06/27 Python
Python搭建代理IP池实现存储IP的方法
2019/10/27 Python
python3跳出一个循环的实例操作
2020/08/18 Python
Python基础进阶之海量表情包多线程爬虫功能的实现
2020/12/17 Python
深入浅析css3 border-image边框图像详解
2015/11/24 HTML / CSS
EJB面试题
2015/07/28 面试题
老公爱的承诺书
2014/03/31 职场文书
群教班子对照检查材料
2014/08/26 职场文书
大学生万能检讨书范例
2014/10/04 职场文书
党支部群众路线整改措施思想汇报
2014/10/10 职场文书
谢师宴学生答谢词
2015/09/30 职场文书
Sql Server之数据类型详解
2022/02/28 SQL Server