js局部和全局变量

本文深入探讨JavaScript中的全局变量和局部变量,解释它们的作用域以及如何在代码中使用。全局变量在整个脚本中都可访问,而局部变量只在函数内部有效。此外,还讲解了函数作用域的特性,以及`var`定义和未定义变量的区别。最后,讨论了函数调用时`this`的指向问题及其变化。

全局变量(全局作用域)直接卸载JavaScript内部,全局都可以调用
局部变量(函数作用域)写在单个函数定义的内部,

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>局部和全局变量</title>
	</head>
	<body>
		<script type="text/javascript">
			/*
			全局变量(全局作用域)直接卸载JavaScript内部,全局都可以调用
			局部变量(函数作用域)写在单个函数定义的内部,			
			*/
			var a = 1;
			function obj(){
			var b = 10;
			
				}
				console.log(a);//全局变量掉的出来
				// console.log(b);//局部变量调不出来
				
				
			// var定义和不是var定义的区别
			// fun1();//放在前面调不出来
			fun2();
			var fun1 = function()
			{
				console.log('fun1');
			}
			function fun2()
			{
				console.log('fun2');
			}
			//函数作用域。调用函数时创建作用域,函数执行完毕,函数作用域销毁
			//没调用一个函数就创建一个作用域
			function fun(){
				}
				fun();
			
			
			//解析器在调用函数时都会向函数内部传递一个参数,这个参数就是this
			function fun4(a,b){
				console.log(this);
			}
			fun4(11,33);
			//以函数调用方式不同this指向也不同
			// 以函数的形式调用时,this指向window
			
			
			
		</script>
	</body>
</html>

<think> 我们正在讨论的是编程中的全局变量,特别是Python中的global关键字。根据用户提供的引用内容,我们可以总结以下几点: 1. 引用[1]提到ECMAScript中的Global对象作为全局属性方法的容器,但用户主要关注Python中的全局变量。 2. 引用[2][3][4][5]都是关于Python中global关键字的使用。 根据引用内容,我们可以整理出关于Python全局变量的关键信息: - 在函数内部,如果要修改全局变量(而不是创建一个同名的局部变量),需要使用`global`关键字声明(引用[2][3][5])。 - 对于可变数据类型(如列表、字典),如果只是修改其中的元素,则不需要使用`global`声明(引用[5])。 - 使用`global`关键字可以在函数内部定义全局变量(引用[4]),但通常不建议这样做,因为会使得代码难以维护。 - 如果不使用`global`声明,在函数内部对变量赋值会创建一个新的局部变量(引用[5])。 用户的问题是想了解golbal全局变量(注意:用户多次将global拼写为golbal,但根据上下文,我们理解其意为global)。我们将针对Python语言进行介绍。 下面开始结构化回答: </think> ### Golbal全局变量介绍 在编程中,全局变量(global variable)是在全局作用域中声明的变量,可在程序的任何位置访问。Python通过`global`关键字实现对全局变量的操作,其核心机制如下: #### 1. 基本作用 - **声明全局变量**:在函数内部使用`global`声明后,可直接修改外部同名全局变量 ```python count = 0 # 全局变量 def increment(): global count # 声明使用全局变量 count += 1 ``` - **创建全局变量**:在函数内部用`global`声明并赋值,会创建新的全局变量(慎用) ```python def create_global(): global new_var # 创建全局变量 new_var = 100 ``` #### 2. 关键特性 - **修改规则**: - 修改**不可变对象**(数字、字符串等)必须使用`global`[^5] - 修改**可变对象**(列表、字典)的元素时无需`global`[^5] ```python lst = [1,2] # 可变对象 def modify_list(): lst[0] = 9 # 直接修改元素,无需global num = 10 # 不可变对象 def modify_num(): global num num = 20 # 必须global ``` - **作用域冲突**:函数内未声明`global`的同名赋值会创建**新局部变量**,导致外部变量被遮蔽[^5] #### 3. 与其它语言对比 | 特性 | Python | JavaScript | |--------------------|-----------------------------|----------------------| | 全局对象 | 无单独全局对象 | `window`(浏览器) | | 全局变量声明 | 需显式`global`声明 | 自动挂载到全局对象 | | 跨模块访问 | `import`模块后使用 | 直接访问`window`属性 | #### 4. 注意事项 - **避免滥用**:过度使用全局变量会降低代码可维护性,建议优先使用函数参数返回值 - **替代方案**:对于复杂场景,可使用`nonlocal`(闭包)、类属性或单例模式 - **线程安全**:多线程环境下修改全局变量需加锁(如`threading.Lock`) > 示例:典型修改陷阱 > ```python > x = 1 > def func(): > if x == 1: # 此处已引用全局x > x = 2 # 触发UnboundLocalError(未声明global) > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值