暗示全局变量GO、AO

1.GO:global object 全局上下文

说白了,其实GO就是window。

var a = 1;
function a(){
  console.log(2)  
}
console.log(a)  

可以看到打印结果是1。那么它的演变过程可以理解为

GO:{
 a:undefined -> function a(){} -> 1
}  

总结一下:

  1. 找变量
  2. 找函数声明
  3. 执行

测试一下:

console.log(a,b)
function a(){
 
}
var b = function(){}

结果是什么?

按照之前说的GO预编译顺序分析一下:

GO:{
 b:undefined,
 a:undefined - > function a(){}
}

执行结果为  a -> function(){}   b:undefined

2.接下来说一下AO:activation object  活跃对象/函数上下文

看个例子:

function test(a){
  console.log(a);
  var a = 1;
  console.log(a);
  function a(){}
  console.log(a);
  var b = function(){}
  console.log(b);
  function d(){}  
}

test(2);

执行函数test(2),打印结果会是什么?先不要着急,后面会输出日志,自己先试一下。

 

分析一下,看下预编译步骤

  1. 首先寻找函数的形参和变量声明
  2. 把实参的参数值赋值给形参
  3. 寻找函数声明,赋值函数体
  4. 执行函数

 

posted @ 2021-02-27 13:48  冲鸭fighting  阅读(99)  评论(0)    收藏  举报