作用域题总结

首先我们得知道什么是作用域,什么是作用域链

作用域它是指对某一变量和方法具有访问权限的代码空间,在js中,作用域是在函数中维护。表示变量或函数起作用的区域,指代了他们在什么杨的上下文中执行,亦即上下文执行环境。JavaScript中的作用域只有两种:全局作用域和本地作用域,本地作用于是按照函数来区分的。

说了那么多其实作用域就是浏览器给js的一个生存环境

那再了解下什么是作用域链:

  js中的关键字var和function都可以提前声明和定义,提前声明和定义的放在我们的内存地址(对内存)中。然后js从上到下逐行执行,遇到变量就去内存地址查找是否存在这个变量。有就使用,没有就继续向父级 作用域查找直到window下结束,这种查找机制叫作用域链。

  我们要知道js代码中存在者大量的变量和函数,我们再使用他们的时候一定要知道他们归属谁

以下是我整理的几道作用域题,可以看一下

1、

  var   a=123;

  function  fun(){

    alert(a)  //123

   }

  fun()

2、

  var   a=123;

  function   fun(){

    alert(a);  //undefined

    var   a=456;

   }

  fun()

  alert(a)  //123

3、

  var   a=123;

  function   fun(){

    alert(a);  //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

    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()  //is  not    defined

  }

  fn()  //11

9、

  var   a=12;

  function   fn(){

    console . log(a)  //undefined

    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

    var  total=num1+num2;

    console . log(total)   //300

   }

  fn(100,200)

  console . log(total)    //0

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、

  function   test(a,b){

    console . log(a)  //function  a

    console . log(b)  //undefined

    var   b=234;

    console . log(b)  //234

    a=123;

    console . log(a)  //123

    function   a(){ }

    var   a;

    b=234;

    var   b=function (){ }

    console . log(a);  //123

    console . log(b)    //function

   }

  test(1)

    注:函数得声明和定义同时发生

原文地址:https://www.cnblogs.com/bokeyanghao/p/10055111.html