`
啸笑天
  • 浏览: 3460919 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

JavaScript变量 没有块范围

阅读更多

局部变量覆盖全局变量,如下:

 

<script>
	//定义全局变量test
	var test = "全局变量"; 
	//定义函数checkscope
	function checkscope()
	{
		//定义局部变量
	//	var test = "局部变量";
		//输出局部变量
		document.writeln(test+"<br/>");
		alert(test);
		//var test="nihao";
	}
	checkscope(); 
</script>
 

 

JavaScript变量没有块范围,只要在方法中定义,无论是在switch块中还是if块中,他们的作用范围都是整个函数。例如下面代码:

<script>
	function test(o)    //javascript是值传递的
	{
		//定义变量i,变量i的作用范围是整个函数
		var i = 0;
		if (typeof o == "object") 
		{
			//定义变量j,变量j的作用范围是整个函数内,而不是if块内。
			var j = 5;
			for(var k = 0; k < 10; k++)
			{
				//因为JavaScript没有代码块范围
				//所以k的作用范围是整个函数内,而不是循环体内
				document.write(k);
			}
		}
		//即使出了循环体,k的值依然存在
		alert(k + "\n" + j); 
	}
	test(document);
</script>
 

 

<script>
	//定义全局变量
	var scope = "全局变量";
	function test()
	{
		//因此全局变量被局部变量覆盖
		//而此时scope局部变量尚未赋值,故此处输出undefined

		document.writeln(scope + "<br />"); 
		//定义scope的局部变量,其作用范围为整个函数内
		var scope = "局部变量";
		//再次输出scope的值。
		document.writeln(scope + "<br />"); 
	}
	test();
</script>
 
 

 

变量范围对于执行html事件处理一样有效,如下:

 

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title> 事件处理中的局部变量和全局变量 </title>
	<meta name="author" content="Yeeku.H.Lee" />
	<meta name="website" content="http://www.leegang.org" />
	<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
	<script type="text/javascript">
		//定义全局变量
		  var x = "全局变量";
	</script>
</head>

<body>
<!-- 在onclick事件中重新定义了x局部变量变量 -->
<input type="button" value="局部变量" 
	onclick="var x = '局部变量'; alert('输出x局部变量的值:' + x);" />
<!-- 直接输出全局变量x的值 -->
<input type="button" value="全局变量 " 
	onclick="alert('输出x全局变量的值: ' + x);" />
</body>
</html>
 

函数(其实也是个类,此函数是唯一的构造器。使用new关键字创建)的

局部变量;没有前缀的变量或var前缀的变量,内部使用

实例变量:this.变量名,通过对象名访问

静态变量:函数名(类名).变量名,通过函数名访问

 

 

 

<script>
	//定义函数Person
	function Person(national, age)
	{
		//this修饰的属性为实例属性
		this.age = age;
		//Person修饰的属性为静态属性
		Person.national =national;    
		//以var定义的变量为局部变量
		var bb = 0;    
	}
	//创建Person的第一个对象p1。国籍为中国,年纪为29
	var p1 = new Person('中国' , 29);
	document.writeln("创建第一个Person对象<br />");
	//输出第一个对象p1的年纪和国籍
	document.writeln("p1的age属性为" + p1.age + "<br />");
	document.writeln("p1的national属性为" + p1.national + "<br />");
	document.writeln("通过Person访问静态national属性为" 
		+ Person.national + "<br />");
	//输出bb属性
	document.writeln("p1的bb属性为" + p1.bb + "<br /><hr />");
	//创建Person的第二个对象p2
	var p2 = new Person('美国' , 32);
	document.writeln("创建两个Person对象之后<br />"); 
	//再次输出p1的年纪和国籍
	document.writeln("p1的age属性为" + p1.age + "<br />");
	document.writeln("p1的national属性为" + p1.national + "<br />");
	//输出p2的年纪和国籍
	document.writeln("p2的age属性为" + p2.age + "<br>");
	document.writeln("p2的national属性为" + p2.national + "<br />");
	//通过类名访问静态属性名
	document.writeln("通过Person访问静态national属性为"
		+ Person.national + "<br />");
</script>
 

 

还可以随时为对象增加方法和属性

 

 

<script>
	function Student(grade , subject)
	{
		//d定义一个grade实例属性,
		//将grade形参的值赋值给该实例属性。
		this.grade = grade;
		//定义一个subject静态属性,
		//将subject形参的值赋值给该静态属性。
		Student.subject = subject;
	}
	s1 = new Student(5, 'Java');
	with(document)
	{
		writeln('s1的grade属性:' + s1.grade + "<br />");
		writeln('s1的subject属性:' + s1.subject + "<br />");
		writeln('Student的subject属性:' + Student.subject + "<br />");
	}
	//为s1对象的subject属性赋值,即为它增加一个subject属性
	s1.subject = 'Ruby';
	with(document)
	{
		writeln('<hr />为s1的subject属性赋值后<br />');
		writeln('s1的subject属性:' + s1.subject + "<br />");
		writeln('Student的subject属性:' + Student.subject + "<br />");
	}
</script>
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    javascript变量作用域

    JavaScript 还没有块级作用域,这意味着在 if 语句、for 循环、while 循环等语句块中定义的变量,在整个函数体内都是可见的,而不是只在语句块中可见。 在 JavaScript 中,函数中声明的变量在整个函数中都有定义。...

    JavaScript程序设计课件:变量的作用范围.pptx

    在JavaScript中,变量的作用范围分为两种主要类型:全局作用域和局部作用域。 1. 全局作用域(Global Scope): 全局变量是在函数外部定义的变量,或者在脚本的顶层定义的变量。它们在整个脚本或JavaScript文件中都...

    JavaScript:变量与数据类型

    - **var关键字**:使用`var`声明的变量在整个函数或全局范围内都是可见的,即使它们是在代码块(如if语句或循环)中声明的。 - **let关键字**:使用`let`声明的变量只在它被声明的代码块内可见。 - **const关键字**...

    浅谈JavaScript的全局变量与局部变量_.docx

    JavaScript中的变量管理是编程中非常基础且重要的概念,它涉及到变量的作用域、生命周期以及如何避免潜在的安全问题。本文将深入探讨JavaScript的全局变量与局部变量。 首先,我们要明白JavaScript的作用域划分标准...

    JavaScript 基础函数_深入剖析变量和作用域

    同时,变量作为存储数据的容器,在JavaScript中拥有不同的作用域规则,决定了变量的可访问范围。 ### 函数的定义和调用 在JavaScript中,函数可以通过两种方式定义,分别是函数声明和函数表达式。函数声明是一种...

    JavaScript:块范围的变量和函数

    本文将深入探讨一个重要的JavaScript特性——块范围的变量和函数,这一特性对于理解和编写更清晰、更安全的代码至关重要。 首先,我们来讨论块作用域变量。在ES6(ECMAScript 2015)之前,JavaScript只支持函数作用...

    JS变量问题详解

    JavaScript中没有块级作用域的概念,直到ES6之前,很多开发者使用立即执行函数表达式(IIFE)来模拟块级作用域,限制变量的作用范围。 闭包是JavaScript中的一个高级概念,它允许函数访问定义时的外部作用域。闭包...

    js变量作用域

    在JavaScript中,局部变量是指在某个函数或块级作用域内定义的变量,其可见范围仅限于该函数或块。如果在一个函数内部不使用`var`、`let`或`const`声明变量,则该变量会自动提升为全局变量。 **示例代码**: ```...

    javascript中局部变量和全局变量的区别详解

    首先,全局变量的作用域是整个JavaScript代码块,包括所有函数和代码块内部。全局变量被声明在函数外部,因此可以在任何地方被访问和修改。由于全局变量具有较大的作用域,因此容易造成命名冲突,并且在复杂的程序中...

    理解JavaScript变量作用域更轻松

    JavaScript变量作用域是编程基础中的重要概念,它决定了变量在哪些范围内可以被访问。了解变量作用域可以帮助开发者更好地管理代码中的数据,防止意外的变量冲突,从而提高代码的稳定性和可维护性。 JavaScript中...

    JavaScript语言 变量、数据类型、对象、函数、作用域、事件、字符串.pdf

    - **作用域规则**:决定了变量的作用范围。 - **局部作用域**:在函数内部声明的变量只在该函数内可见。 ```javascript function testScope() { var localVar = "local"; } console.log(localVar); // ...

    Javascript 变量作用域 两个可能会被忽略的小特性

    Javascript变量作用域是编程中非常基础且重要的一个概念,它决定了代码中变量的可访问性和生命周期。在Javascript中,变量作用域有两个可能会被忽略的小特性,即with语句和try-catch语句对变量作用域的影响,以及...

    JavaScript 变量作用域分析

    JavaScript 中的变量作用域是一个非常重要的概念,它决定了变量在程序中可以被访问的范围。理解变量作用域有助于编写更加高效和可预测的代码。 首先,全局作用域指的是在 JavaScript 程序中任何位置都可以访问的...

    [JavaScript入门]Eloquent JavaScript(2nd)

    如今,JavaScript的应用范围已经远远超出了最初的设想,它被用于开发各种类型的应用程序,包括服务器端应用程序(Node.js)和移动应用。 书中介绍了JavaScript中的基本数据类型,包括数字、字符串和布尔值。数字是...

    javascript中文经典帮助手册

    同时,前端框架如React、Vue或Angular等,大量使用JavaScript来构建现代Web应用,进一步扩展了其在网页开发中的应用范围。 总之,"JavaScript中文经典帮助手册"涵盖了JavaScript的全面知识,无论你是初学者还是有...

    JavaScript变量的作用域全解析

    在探讨JavaScript变量的作用域之前,首先需要明确什么是作用域。作用域是程序中定义变量的区域,它决定了变量可以被访问的范围。在JavaScript中,作用域分为全局作用域和局部作用域。了解这两个基本概念对理解...

    JavaScript程序编码规范.pdf

    - **内函数声明**:内函数声明应紧跟在变量声明之后,这有助于区分哪些变量在函数范围内。 - **语法格式**:函数名称与左括号之间不应有空格;右括号与左大括号之间应有一个空格;函数体应该缩进四个空格。 #### 八...

    javascript变量作用域使用中常见错误总结

    - 虽然题目中没有直接涉及,但在JavaScript中,函数可以访问其自身、调用它的函数以及全局作用域中的变量,形成了作用域链。这在处理异步操作、封装私有变量时非常重要。 6. **let 和 const 关键字(ES6新增)** ...

    javascript中文手册 javascript中文手册

    JavaScript的核心概念包括变量、数据类型、运算符、流程控制(如条件语句和循环)、函数、对象以及数组。变量在JavaScript中可以动态声明和赋值,数据类型包括基本类型(如字符串、数字、布尔值)和引用类型(如对象...

Global site tag (gtag.js) - Google Analytics