作用域面试大纲总结

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

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

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

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

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

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

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

1、
  var   a=123;
  function  fun(){
    alert(a)  
   }
  fun()
2、
  var   a=123;
  function   fun(){
    alert(a);  
    a=456;
   }
  fun()
  alert()  //
3、
  var   a=123;
  function   fun(){
    alert(a);  
    a=456;
   }
  fun()
  alert(a)    
4、
  var   a=123;
  function   fun(a){
    alert(a);  
    a=456;
   }
  fun();
  alert(a)  
5、
  var   a=123;
  function    fun(a){
    alert(a);  
    a=456;
   }
  fun(123)
  alert(a)  
6、
  var   a=12;
  function   fn(){
    console . log(a)  
    var   a=45;
     console . log(a) 
   }
  fn()
7、
  var   a=12;
  function   fn(){
    console . log(a)  
    a=45;
    console . log(a)  
    }
  fn()
8、
  function   fn(){
    console . log(11) 
    function    ff(){
      console . log(22)
      }
    ff()  
  }
  fn()  
9、
  var   a=12;
  function   fn(){
    console . log(a)  
    return  4;
    var  a=45;
   }
  fn()
10、
  var   a=45;
  function    fn(a){
    console . log(a) 
   }
  fn()
11、
  console . log(total);  
  var   total=0;
  function  fn(num1,num2){
    console . log(total);  
    var  total=num1+num2;
    console . log(total)   
   }
  fn(100,200)
  console . log(total)   
12、
  console . log(to)    
  var   to=1;
  function   fn(n1,n2){
    console . log(to)   
    to=n1+n2;
    console . log(to)    
   }
  fn(10,20)
  console . log(to)    
13、
  function  fn(a){
    console . log(a)  
    var   a=123;
    console . log(a) 
    function  a(){ }
    console . log(a)  
    var  b=function(){ }
    console . log(b) 
    function b(){ }
   }
  fn(1)
  注:如果我们声明得变量和函数同名了,在预解释得时候只声明一次
14、
  function test(a,b){
    console . log(b)  
    console . log(a)  
    c=0;
    a=3;
    b=2;
    console . log(b);    
    function   b(){ }
    function   d(){ }
    console . log(b)    
   }
  test(1)
15、
  function   test(a,b){
    console . log(a)  
    console . log(b)  
    var   b=234;
    console . log(b)  
    a=123;
    console . log(a)  
    function   a(){ }
    var   a;
    b=234;
    var   b=function (){ }
    console . log(a);  
    console . log(b)    
   }
  test(1)

原文地址:https://www.cnblogs.com/wkxdd/p/10054949.html