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 相关文章推荐
两个select之间option的互相添加操作(jquery实现)
Nov 12 Javascript
js和jquery批量绑定事件传参数一(新猪猪原创)
Jun 23 Javascript
在javascript中关于节点内容加强
Apr 11 Javascript
JS实现根据出生年月计算年龄
Jan 10 Javascript
JS实现支持多选的遍历下拉列表代码
Aug 20 Javascript
JavaScript学习笔记之检测客户端类型是(引擎、浏览器、平台、操作系统、移动设备)
Dec 03 Javascript
Bootstrap+jfinal实现省市级联下拉菜单
May 30 Javascript
React-Native做一个文本输入框组件的实现代码
Aug 10 Javascript
js canvas实现写字动画效果
Nov 30 Javascript
利用angular自动编译andriod APK的绕坑经历分享
Mar 08 Javascript
微信小程序可滑动月日历组件使用详解
Oct 21 Javascript
解决Antd Table表头加Icon和气泡提示的坑
Nov 17 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
Windows IIS PHP 5.2 安装与配置方法
2009/06/08 PHP
php如何解决无法上传大于8M的文件问题
2014/03/10 PHP
JavaScript词法作用域与调用对象深入理解
2012/11/29 Javascript
js实现模拟计算器退格键删除文字效果的方法
2015/05/07 Javascript
Jsonp 关键字详解及json和jsonp的区别,ajax和jsonp的区别
2015/12/30 Javascript
jQuery数据类型小结(14个)
2016/01/08 Javascript
浅析JavaScript中命名空间namespace模式
2016/06/22 Javascript
jquery siblings获取同辈元素用法实例分析
2016/07/25 Javascript
JavaScript简单获取系统当前时间完整示例
2016/08/02 Javascript
vue.js 1.x与2.0中js实时监听input值的变化
2017/03/15 Javascript
angular使用post、get向后台传参的问题实例
2017/05/27 Javascript
JavaScript之事件委托实例(附原生js和jQuery代码)
2017/07/22 jQuery
Vue-Cli中自定义过滤器的实现代码
2017/08/12 Javascript
Vue项目中配置pug解析支持
2019/05/10 Javascript
jQuery Datatables 动态列+跨列合并实现代码
2020/01/30 jQuery
vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据操作
2020/07/31 Javascript
原生JS实现拖拽效果
2020/12/04 Javascript
echarts浮动显示单位的实现方法示例
2020/12/04 Javascript
[44:47]Ti4 循环赛第三日 iG vs NaVi
2014/07/12 DOTA
[01:07:17]EG vs Optic Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
python实现带声音的摩斯码翻译实现方法
2015/05/20 Python
分享一下Python数据分析常用的8款工具
2018/04/29 Python
python MNIST手写识别数据调用API的方法
2018/08/08 Python
解决Python内层for循环如何break出外层的循环的问题
2019/06/24 Python
Python hmac模块使用实例解析
2019/12/24 Python
pytorch forward两个参数实例
2020/01/17 Python
python梯度下降算法的实现
2020/02/24 Python
学python需要去培训机构吗
2020/07/01 Python
印度网上购物首选目的地:Flipkart
2016/08/01 全球购物
电子商务应届生自我鉴定
2014/01/13 职场文书
诚实守信演讲稿
2014/09/01 职场文书
大学生见习报告总结
2014/11/04 职场文书
售票员岗位职责
2015/02/15 职场文书
可可西里观后感
2015/06/08 职场文书
岗位聘任协议书
2015/09/21 职场文书
简单且有用的Python数据分析和机器学习代码
2021/07/02 Python