作用域作用域链自由变量变量提升

Posted fengshaopu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了作用域作用域链自由变量变量提升相关的知识,希望对你有一定的参考价值。

一、作用域

对象 类型
global/window 全局作用域
function 函数作用域(局部作用域)
{}块状作用域
this动态作用域

全局作用域 :任何地方都可以访问,反复使用
函数作用域(局部作用域):仅在函数内部可使用的变量,不能反复使用
例子:

var a=10;
	function fun()
	{
		var a=100;
		a++;
		console.log(a);
	}
	fun();//101

	console.log(a);//10

二、作用域链
自由变量的向上级作用域一层一层查找,直到找到为止,最高找到全局作用域,就形成了作用域链。

三、自由变量
自由变量的概念: 当前作用域没有定义的变量

  var a=0;
    function f1(){
 console.log(a) //当函数中没有定义这个变量,切可以使用时,这就是自由变量
    }
    f1()

四、变量提升
var声明的变量,function声明的函数存在变量提升
let const 不会变量提升

五、预解析
只要还有一个函数作用域的时候就会有域解析:
var跟函数可以变量提升

1.第一种情况 全局
因为var 变量提升了 ,因为变量提升了没有赋值所以第一个a是undefind

`提升到了 这里      var a `


console.log(a) //undefind
var a = 10
console.log(a)// 10

2.第二种函数内部
因为 function x() 跟 var 变量提升了
有function 的时候会先提升

`提升到了 这里   function x()   var a `
  var x = 30;
  function test(){
      alert(x);     //undefined
      var x = 10;    
      alert(x);     //10
      x=20;
      function x(){

      };
      alert(x);     //20
  }
  test();

以上是关于作用域作用域链自由变量变量提升的主要内容,如果未能解决你的问题,请参考以下文章

作用域作用域链自由变量变量提升

JavaScript 作用域作用域链变量提升

JavaScript 作用域作用域链变量提升

原型模式故事链--JS变量作用域作用域链闭包

JavaScript作用域:全局作用域局部作用域块级作用域作用域链变量提升

深入理解javascript原型和闭包(14)——从自由变量到作用域链