JS基础 : 作用域链

1. 什么是作用域
作用域是在运行时代码中的某些特定部分中变量,函数和对象的可访问性。
如下代码:

     console.log(fu);        //function
     console.log(a);        //undefined
	 function print(){
	 	console.log(a)     //10
	 	console.log(fu);   // function  fud的代码块   
	 	function fu(){
	 		var b = 20;
	 		console.log(a)  //10
	 		 function fu2(){
	 		 	console.log(b);  //20
	 		 }
	 		 fu2();
	 	}
	 	fu();
	 }
	  var a = 10;
	  function fu(){}
	print();

当浏览器打开时—> GO{
print : function print(){}
fu : function fu(){}
a : undefind;
}

  1. 执行第一行代码: consile.loge(fu); // ƒ fu(){}
    console.log(a); //undefined

  2. 执行完成后 a = 10;
    . print() ---- AO{
    fu : function fu(){}
    . }

  3. 执行print () :
    consile.loge(a); // 10
    console.log(fu); //fu里面的代码块
    fu() ---- AO{
    b : undefined
    fu2: function fu2(){}
    }

  4. 执行 fu() :
    console.log(a); //10
    执行完后 b = 20;

  5. 执行 fu2()
    console.log(b); // 20

全局作用域
任何地方都能访问到的对象拥有全局作用域。
函数外面定义的变量拥有全局作用域.
未定义直接赋值的变量自动声明为拥有全局作用域.
window对象的属性拥有全局作用.
在这里插入图片描述
局部作用域
局部作用域一般只在固定的代码片段内可访问到,最常见的例如函数内部,所以在一些地方会把这种作用域成为函数作用域。
如图:
在这里插入图片描述
a是函数内部声明并赋值,拥有局部作用域,只能带函数 select 内部使用,在 select 外部使用就会报错,这就是局部作用域的特性,外部无法访问.

作用域链
当声明一个函数时,局部作用域一级一级向上包起来,就是作用域链。
当执行函数时,总是先从函数内部找寻局部变量
如果内部找不到(函数的局部作用域没有),则会向创建函数的作用域(声明函数的作用域)寻找,依次向上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值