玩转js之10-浅谈变量的作用域

一、什么是作用域?

作用域: 指一个变量它在哪些代码范围能够被使用,这些地方就是变量的作用域

// 变量的作用域(入门)
			var a=20
			function fn(a){
				//隐式代码 var a=10
				console.log(a)  //10
			}
			fn(10)

			var b=30
			function fn(){
				var a=20
				console.log(a)//20
				console.log(b)//30
			}		
			fn()


			 var a=30
			function fn(){
            var a=20
				console.log(a)	//20	
			}		
			fn()
			console.log(a)  //30

二、变量的作用域

  • 在es5中 函数的代码块内部的代码 可以访问形参变量 也可以访问外部的变量(全局) 就近优先
  • 函数外面的代码不能直接访问函数内部的变量
  • 全局变量==>变量会在程序运行时 把它设置为window对象的属性
	var a=20//全局变量==>变量会在程序运行时 把它设置为window对象的属性
			function fn(){
				a=40
			}
			fn()
			console.log(a)  //40
			
			function fm(){
				a=60
			}
			fm()


			console.log(a)//60

			a=100
			console.log(a)  //100

  • 局部变量就是函数内部能使用 外部不能使用的变量( var,形参)
function fn(a) {
				var b = 20
				console.log(a, b)  //100,20
			}
			fn(100)

			console.log(a)  //a没有定义,报错
			console.log(b)  //b没有定义,报错

案例
题1:

var obj={
				name:"karen"
			}
			function fn(n){
				//隐式代码: var n="karen"
				n="jack"
			}
			fn(obj.name)
			console.log(obj.name)//

答案:karen
解析: fn(obj.name) ,将obj.name取值然后再传入函数,在函数内部隐式声明变量n,赋值为karen,后将n的值改为jack

题2:

         var obj={
				name:"karen"
			}
			function fn(n){	
			
				 n.name="jack"  
				
			}
			fn(obj)
			console.log(obj.name)//

答案:jack
解析:obj是一个对象,fn(obj),obj取值操作取的是一个引用的对象,在函数内部隐式操作 var n=内存中的那个传入的对象,n和obj共用一个内存空间, n.name=“jack” ,其实没有修改n的值,修改了n对应的内存空间里的name属性的值,所以obj.name也改变了。

题3:

		var obj={
				name:"karen"
			}
			function fn(n){	
				//隐式操作 var n=内存中的数那个传入的对象
						// n={name:"jack"}//把n的值改了
				
			}
			fn(obj)//obj取值操作 取的是一个引用的对象
			console.log(obj.name)//
			

答案:karen
解析:跟上一题的分析相同,只不过此题的n被重新指向新的一个内存空间了,而obj.name的值没有被改变。

总结

变量的作用域很重要,后面会更着重的讲一遍,要掌握函数外部不可以访问函数内部的变量,函数内部可以访问和改变外部的全局变量。函数会提前隐式声明变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值