#js#作用域,作用域链,闭包

110 阅读1分钟

作用域

每个变量都有自己的作用域,变量又分为局部变量和全局变量;
在js中没有用块级作用域,只有函数有作用域;
  • 全局变量:拥有全局的作用域,任何函数都可以访问。
  • 局部变量:拥有自己的作用域,函数外部是无法访问,只有函数内部可以访问。

注意:在函数内声明变量时,需要加上var,不然会自动提升为全局变量

	function func() {
		value = '我是全局变量';
   	}

注意:只要在函数内定义了一个变量,该变量会被提前声明

	function func() {
		console.log(value);//undefined
        	var value = '我是局部变量';
    	}

作用域链

每个函数都拥有自己作用域,每个作用域都关联了一个变量对象和拥有自己作用域链。作用域中的变量和函数都保存到这个变量对象中,而	 当前作用域始终在作用域链的前端;
window对象作为全局作用域的变量对象;

闭包

内部函数的作用域链仍然保持着对父函数活动对象的引用,就是闭包(closure);

作用

  • 可以读取自身函数外部的变量(沿着作用域链寻找)
  • 让这些外部变量始终保存在内存中