`
startFromZero
  • 浏览: 7579 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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
}

 

 

分享到:
评论

相关推荐

    Web前端开发技术-认识函数作用域.pptx

    作用域划分:全局作用域、函数作用域和块级作用域(ES6提供的)。 不同作用域对应的变量:全局变量、局部变量、块级变量(ES6提供的)。 函数作用域 全局作用域 块级作用域 1.作用域分类 全局变量和局部变量 ...

    JAVASCRIPT函数作用域和提前声明 分享

    javascript使用函数作用域,即变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的,也即函数内声明的所有变量在函数体内始终是可见的。这样就意味着变量在声明之前就可以使用,这个特性被称为”...

    javascript函数作用域学习示例(js作用域)

    javascript中没有块级作用域,取而代之的javascript使用的是函数作用域,下面使用示例学习一下js作用域的使用方法

    Web前端面试题目JavaScript(作用域,原型。原型链,闭包,封装函数).txt

    前端面试题,包含JavaScript的闭包,作用域,原型,原型链,上下文环境以及DOM,BOM封装函数深度克隆,以及一些常见的·JS问题,试题简单但是容易混淆,作为前端工程师必考题

    javascript的函数作用域

    javascript中没有块级作用域。取而代之的javascript使用的是函数作用域(function scope):变量在声明它的函数体以及这个函数体嵌套的任意函数体内都是有定义的。

    理解JavaScript作用域和作用域链

    作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理。今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望能帮助大家更好的学习JavaScript。任何程序...

    通过函数作用域和块级作用域看javascript的作用域链

    在ES6之前,javascript只有全局作用域和函数作用域。所谓作用域就是一个变量定义并能够被访问到的范围。也就是说如果一个变量定义在全局(window)上,那么在任何地方都能访问到这个变量,如果这个变量定义在函数...

    JavaScript函数作用域链分析

    本文实例分析了JavaScript函数作用域链。分享给大家供大家参考。具体分析如下: 作用域链: JavaScript的每个函数function都有自己的作用域,使用Active Object(简称AO)活动对象来保存,在相互嵌套的函数中形成了...

    javascript 闭包、匿名函数、作用域链

    NULL 博文链接:https://xieyaxiong.iteye.com/blog/1558277

    浅谈JavaScript的函数及作用域

    函数和作用域是JavaScript的重要组成部分,我们在使用JavaScript编写程序的过程中经常要用到这两部分内容,作为初学者,我经常有困惑,借助写此博文来巩固下之前学习的内容。 (一)JavaScript函数 JavaScript函数是...

    JavaScript的作用域和块级作用域概念理解

    函数作用域就好理解了(*^__^*) ,定义在函数中的参数和变量在函数外部是不可见的。 大多数类C语言都拥有块级作用域,JS却没有。请看下文demo: //C语言 #include void main() { int i=2; i--; if(i) { int j=3; } ...

    JavaScript函数式编程

    全书共9章,分别介绍了JavaScript函数式编程、一等函数与Applicative编程、变量的作用域和闭包、高阶函数、由函数构建函数、递归、纯度和不变性以及更改政策、基于流的编程、类编程。除此之外,附录中还介绍了更多...

    JavaScript 作用域 和作用域链

    JavaScript 作用域 和作用域链作用域作用域链 作用域 作用域就是变量与函数的可访问范围,作用域控制着变量与函数的可见性和生命周期。换句话说,作用域决定了代码区块中变量和其他资源的可见性。 function fun() { ...

    深入理解JavaScript作用域和作用域链

    JavaScript作用域 任何程序设计语言都有作用域的概念,简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。在JavaScript中,变量的作用域有全局作用域和局部作用域两种。 1...

Global site tag (gtag.js) - Google Analytics