作用域问题

1、

  var   a=123;

  function  fun(){

    alert(a)  //123    

   }

  fun()

2、

  var   a=123;

  function   fun(){

    alert(a);  //undefined,作用域:此时的a应该访问函数内声明的a,但是变量声明分两步:变量创建+变量初始化(初始化为undefined).然后才是赋值。因此,此处

            输出undefined(这里面也有个变量提升的问题在里面)

    var a=456;

   }

  fun()

  alert(a)  //123

3、

  var   a=123;

  function   fun(){

    alert(a);  //123   在函数题内没有找到变量a的声明,于是在外层找,找到外层全局声明var a=123,于是调用函数时,输出123

    a=456;

   }

  fun()

  alert(a)    //456

4、

  var   a=123;

  function   fun(a){

    alert(a);  //undefined   没有传参

    a=456;

   }

  fun();

  alert(a)  //123

5、

  var   a=123;

  function    fun(a){

    alert(a);  //123     传参进来后步骤如同题3

    a=456;

   }

  fun(123)

  alert(a)  //123

6、

  var   a=12;

  function   fn(){

    console . log(a)  //undefined

    var   a=45;

     console . log(a)  //45

   }

  fn()

7、

  var   a=12;

  function   fn(){

    console . log(a)  //12

    a=45;

    console . log(a)  //45

    }

  fn()

8、

  function   fn(){

    console . log(11) 

    function    ff(){

      console . log(22)

      }

    ff()  //22

  }

  fn()  //11

9、

  var   a=12;

  function   fn(){

    console . log(a)  //undefined   同题2

    return  4;

    var  a=45;

   }

  fn()

10、

  var   a=45;

  function    fn(a){

    console . log(a)  //undefined  没有传参

   }

  fn()

11、

  console . log(total);  //undefined

  var   total=0;

  function  fn(num1,num2){

    console . log(total);  //undefined   同题2

    var  total=num1+num2;

    console . log(total)   //300

   }

  fn(100,200)

  console . log(total)    //0     是全局的total

12、

  console . log(to)    //undefined

  var   to=1;

  function   fn(n1,n2){

    console . log(to)   //1

    to=n1+n2;

    console . log(to)    //30

   }

  fn(10,20)

  console . log(to)    //30

13、

  function  fn(a){

    console . log(a)  //function

    var   a=123;

    console . log(a)  //123

    function  a(){ }

    console . log(a)  //123

    var  b=function(){ }

    console . log(b)  //function

    function b(){ }

   }

  fn(1)

  注:如果我们声明得变量和函数同名了,在预解释得时候只声明一次

14、

  function test(a,b){

    console . log(b)  //function

    console . log(a)  //1

    c=0;

    a=3;

    b=2;

    console . log(b);    //2

    function   b(){ }

    function   d(){ }

    console . log(b)    //2

   }

  test(1)

15、

  fun

原文地址:https://www.cnblogs.com/GinaHan/p/11449445.html