`

JavaScript作用域之没有块级作用域

阅读更多

JavaScript作用域之没有块级作用域

 

与C、C++以及JAVA不同,Javscript没有块级作用域。函数中声明的所有变量,无论是在哪里声明的,在整个函数中它们都是有定义的。

 

上例子

 

例子一、下面代码中,变量i、j和k和作用域是相同的,它们三个在整个函数中都有定义。

 

<script>
function test(o){
	var i=0;
	if(typeof o == "object"){
		var j=0;
		for(var k=0; k<10; k++){
			document.writeln("k="+k);
		}
		document.writeln("k2="+k);
	}	
	document.writeln("j="+j);	
}

test(new String("pppp"));
</script>

 

输出结果为:k=0 k=1 k=2 k=3 k=4 k=5 k=6 k=7 k=8 k=9 +++k=10 j=0

 

这一规则可以产生惊人的结果,上代码

 

<script>
var scope="global";
function f(){
	alert(scope);
	var scope="local";
	alert(scope);	
}

f();
</script>

 

结果:第一个alert输出:underfined而不是global,第二个alert输出local

 

上面函数f与下面的函数等价:

 

function f(){
	var scope;
	alert(scope);
	var scope="local";
	alert(scope);		
}

 

如果你写成:

 

<script>
var scope="global";
function f(){
	alert(scope);
	var scope2="local";
	alert(scope2);	
}

f();

</script>
 

输出结果为:第一个alert为global,第二个为:local.

 

分享到:
评论

相关推荐

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

    相比之下,JavaScript并没有原生的块级作用域,如下例所示: ```javascript function test() { for (var i = 0; i ; i++) {} alert(i); // 输出 "3" } test(); ``` 尽管`i`是在`for`循环内部定义的,但它在整个`...

    javascript变量作用域

    JavaScript 没有块级作用域,而是基于函数作用域和全局作用域的。 首先,看看 JavaScript 的作用域链是如何工作的。JavaScript 首先在当前作用域中查找变量,如果没有定义,则会继续查找上一层作用域,直到找到...

    为什么JavaScript没有块级作用域

    JavaScript 是一种广泛使用的编程语言,它在早期版本中没有实现块级作用域(block scope),这是它与其他许多编程语言的一个显著区别。在 JavaScript 中,变量的作用域是由函数定义的,即使在块级结构比如循环或条件...

    JavaScript应用实例-js块级作用域.js

    JavaScript应用实例-js块级作用域.js

    Javascript中的作用域及块级作用域

    b、JavaScript没有块级作用域。 c、函数中声明的变量在整个函数中都有定义。  javascript的变量作用域,与平时使用的类C语言不同,例如C#中的代码: static void Main(string[] args) { if(true) { int number=...

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

    JavaScript作用域是编程中至关重要的...在实际编程中,我们还会遇到闭包、块级作用域(ES6中的`let`和`const`)等更高级的概念,这些都是基于作用域链的扩展,理解它们对于成为精通JavaScript的开发者来说必不可少。

    05-JavaScript作用域.pdf

    在ES6之前,JavaScript没有块级作用域,但if语句和for语句中的var声明的变量仍然有函数作用域或全局作用域。 四、函数作用域 函数作用域通常与局部作用域相重叠,但指的是通过函数定义的方式(使用function关键字或...

    JavaScript作用域原理

    JavaScript作用域是编程中至关重要的概念,它定义了变量、函数和对象的可见性和生命周期。在JavaScript中,作用域主要分为两种类型:全局作用域和局部作用域。此外,随着ES6的引入,块级作用域和函数作用域也变得...

    深入理解JavaScript作用域共12页.pdf.zip

    JavaScript作用域是编程中至关重要的概念,尤其是在JavaScript这种动态类型的脚本语言中。它规定了变量、函数以及其它标识符的可见性和生命周期,是代码组织和管理的关键元素。本资料"深入理解JavaScript作用域共12...

    JavaScript作用域示例详解_.docx

    不同于Java或C#,JavaScript并没有块级作用域,这意味着在JavaScript中,大括号`{}`并不创建新的作用域。因此,变量在函数内部声明(使用`var`关键字)时,即使在`if`、`for`或`while`等控制结构内声明,它们在整个...

    js代码-闭包原理实例 ES5 只要函数作用域,无块级作用域

    在ES5版本的JavaScript中,确实没有块级作用域,只有函数作用域和全局作用域。这使得闭包在JavaScript中扮演了至关重要的角色。 闭包的基本概念是,当一个函数内部定义了另一个函数时,内部函数可以访问外部函数的...

    JavaScript使用闭包模仿块级作用域操作示例

    在JavaScript中,变量的作用域分为全局作用域和函数作用域,但没有块级作用域。这意味着在`for`循环或其他块语句(如`if`、`else`)中定义的变量实际上是在包含它们的函数作用域内创建的,而不是仅限于那个块。这...

    JavaScript作用域示例详解

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

    JavaScript匿名函数之模仿块级作用域

    在JavaScript中没有块级作用域(block scope)的概念,通常变量声明在函数作用域(function scope)中。这意味着,如果你在JavaScript中的块级语句(如if或for语句)里声明一个变量,那么这个变量实际上是在包含它的...

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

    在JavaScript中,主要有两种类型的作用域:函数作用域和块级作用域。 函数作用域是JavaScript在ES6之前唯一提供的作用域类型。在函数作用域中,变量在函数内部定义,只能在该函数内部访问。例如: ```javascript ...

Global site tag (gtag.js) - Google Analytics