js作用域的一些了解

2018-08-21  本文已影响0人  切图仔_Howe
//js解析的过程:
//1、寻找声明(全局作用域)
//      var x;
//      function a(){}
//2、执行
//      x = 5;
//      a();————>执行到a函数的过程中再重新进行以上两步
//              (1)、寻找声明 var x;(函数作用域)
//              (2)、执行:
//                     alert(x);这个x在函数作用域中存在,并且还没执行到赋值的那一步,那么弹出的东西就是undefined;
//                     x=10;
//      alert(x) 这里的输出是全局变量并且已经赋值 5;
    var x = 5;
    a();
    function a(){
        alert(x);//undefind
        var x = 10;
    }
    alert(x);//5
 a()
 function a(){
    alert(x);//undefind
    var x = 10;
 }
alert(x);//报错,未定义
//先声明函数a,里面的输出在声明之后赋值之前,所以输出undefind;
//第二个输出因为在全局中没有声明,所以是未定义错误
alert(a)//函数块本身

function a() {
    alert("函数")
}

var a = 1;  
alert(a)//1
//先声明函数a,一个是函数a,一个是变量a,因为function比var声明的权重高,所以第一个输出就是函数a本身的代码块
//第二个输出是在变量a赋值的后面,所以自上而下的执行的话,这里输出1;
var a = 5;

function fn() {
    alert(a)//5
}

fn()
//===================================
解析过程

  1.寻找声明

    var a;

    function fn(){}

  2.执行

    a = 5;

    fn()--------------------------------------> 函数

                    1.找声明

                    2.执行

                     alert(a);  他这里没有a 所以去找爸爸要。  a = 5;   所以弹窗是  5

  所以最后结果为  弹窗5

  下面看一下爸爸会不会去找儿子要东西
//====================================

function fn(){
    var b = 5; 
    return b;    
}
fn();
alert(b);//报错,未定义
//======================================
1.寻找声明

    function fn(){}

  2. 执行

    fn()----------------------------------------> 函数

                      1.寻找声明

                        1.var b;

                      2.执行

                        return b;

  alert(b);   //我们看一下返回值是多少   b is not defined   他说b没有被定义,说明父作用域不可以向自作用域去寻找变量。
 fn()
  alert(a)//1
  var a = 0;
  alert(a);//0
  function fn(){
      a = 1;//变量提升,没有用var声明,归到window下面
  }
上一篇 下一篇

猜你喜欢

热点阅读