javascript的函数作用域
在一些类似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中的原型(prototype)及原型链的继承方式
在javascript学习笔记(八)中,我们主要学习了在使用javascript面向对象编程时,如何创建对象及添加对象的属性和方法。2011-04-04Mobile Web开发基础之四--处理手机设备的横竖屏问题
这篇文章主要介绍了Mobile Web开发基础之-—处理手机设备的横竖屏,window.orientation属性与onorientationchange事件以及media query方式是开发过程中需要注意到的两种解决方式,需要的朋友可以参考下2017-08-08在JavaScript中操作时间之getYear()方法的使用教程
这篇文章主要介绍了在JavaScript中操作时间之getYear()方法的使用教程,是JS入门学习中的基础知识,需要的朋友可以参考下2015-06-06JavaScript中使用Math.floor()方法对数字取整
这篇文章主要介绍了JavaScript中使用Math.floor()方法对数字取整,是JS入门学习中的基础知识,需要的朋友可以参考下2015-06-06详解javascript中var与ES6规范中let、const区别与用法
es6刚流行那会,我只知道var即将退出历史舞台,取而代之的是let和const,却不知道var有什么缺陷,为什么会被取代。今天在网上看到一段视频,解答了我的疑惑2020-01-01缓动函数requestAnimationFrame 更好的实现浏览器经动画
requestAnimationFrame是什么?一直是我们大家所疑惑的,缓动函数requestAnimationFrame 更好的实现浏览器经动画,接下来将为大家详细介绍2012-12-12
最新评论