快速过一遍JavaScript(八)·作用域+this

一、作用域

作用域:指一个变量的作用范围,在JS中一共有两种作用域:

1. 全局作用域

  • 直接编写在script标签中的JS代码,都在全局作用域
  • 全局作用域在页面打开时创建,在页面关闭时销毁
  • 在全局作用域中,有一个全局对象window,代表的是一个浏览器的窗口,由浏览器创建,可以直接使用
  • 在全局作用域中,创建的变量都会作为window对象的属性保存,创建的函数都会作为window的方法保存
  • 全局作用域中的变量都是全局变量,在页面的任意部分都可以访问的到

2. 函数作用域

  • 调用函数时创建函数作用域,函数执行完毕之后,函数作用域销毁
  • 每调用一次函数就会创建一个新的函数作用域,他们之间是相互独立的
  • 在函数作用域中可以访问到全局作用域的变量;但是全局作用域中无法访问到函数作用域的变量
  • 当在函数作用域操作一个变量时,它会先在自身作用域中寻找,如果有直接使用,如果没有则向上一级作用域中寻找
  • 在函数中要访问全局变量,可以使用window对象
  • 声明提前:
    使用var关键字声明的变量,会在函数中所有代码执行之前被执行
    函数声明也会在函数所有代码之前被执行
  • 在函数中不适用var声明的变量都会成为全局变量
  • 定义形参就相当于在函数作用域中声明了变量
	var a = 10;
	var b = 20;
	console.log("window.a = "+window.a,"window.b = "+window.b);
	//console.log("window.c = "+window.c,"c = "+c);
				
	var d = 33;
				
	function fun1(){
		console.log("a = "+a);
		console.log("d = "+d);
		var a = 22;
		d = 44;
		e = 55;
	}
				
	fun1();
				
	console.log("d = "+d);
	console.log("e = "+e);
				
	var f = 66;
	function fun2(f){
		console.log("f = "+f);
	}
				
	console.log("fun2(20):"+fun2(20));
	console.log("fun2():"+fun2());

在这里插入图片描述

二、this

  • 解析器(浏览器)在调用函数每次都会向函数内部传递进一个隐含的参数,这个隐含的参数就是this
  • this指向的是一个对象,这个对象称为函数执行的上下文函数
  • 根据函数调用方式的不同,this会指向不同的对象:
    1.以函数的形式调用时,this永远都是window
    2.以方法的形式调用时,this就是调用方法的那个对象
	function funa(g,h){
		console.log("g="+g+",h="+h);
		console.log("this="+this);
	}
	funa(100,200);
				
	function funb(){
		console.log("this.name:",this.name);
	}
				
	funb();
				
	// 创建一个对象
	var obja = {
		name:"ahah",
		// 把obja的一个属性定义成一个函数
		sayName:funb
	};
	var objb = {
		name:"bla",
		sayName:funb
	};
				
	console.log("obja.name == funb :", obja.sayName == funb);
	var name = "quanju"
	obja.sayName();
	objb.sayName();

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值