js的执行过程

js的执行过程

解析语法

  • 若语法错误直接报错
// 此为语法错误 将不会打印 hello  
//  而是直接 打印 Uncaught SyntaxError: Unexpected identifier 
console.log('hello')

vac b;
// SyntaxError: Unexpected token ';'
console.log(hello)
const obj={
  name;zhangsan
}

js的预编译

生成 GO(Global Object)

  • 全局扫描将 var 和 function 放入GO中
    • var定义的变量先设置为undefined
    • 是function的则直接将function写入AO(这就是你即使function在最底部 而你调用在上面也是可以调用的)
//1. GO{
//   a:undefined,
 //  c :function c(){}
// }

var a=123;

function c(){

}
//2. GO{
//   a:123,
 //  c :function c(){}
// }
// 若 有变量和函数名字相同时
//1. GO{
//   a:function c(){},
// }

var a=123;
function a(){}

//2. GO{
//   a:123,
// }

// 调用function

a(); // hello

function a(){
    console.log('hello')
}
// 若使用 const定义的function则预编译不会放入AO中

a();  // Cannot access 'a' before initialization

const a=function (){
    console.log('hello');
}
// a(); // hello 若将上面的a()注释掉将下面的打开则可以正常使用打印 

js的执行

  • 解释性执行。就是一行一行的读取代码执行代码。
// 同步无异步
// GO{
//   name:undefined,
//  fn :function fn(){}
// }

fn(); // 进入fn();
var name='zhangsan';
// GO{
//   name:'zhangsan',
//  fn :function fn(){}
// }

function fn(){
// GO{
//   name:undefined,
//  fn :function fn(){}
// }
  /*
  * AO {
  *   c:undefined;
  *
  * }
  * */
  console.log(c) // undefined
  console.log(name) // undefined
  var c=2;
  console.log(c)
  /*
  * AO {
  *   c:2;
  *
  * }
  * */
}

/*
GO{
  name:undefined,
 fn :function fn(){}
}
* */
fn(); // 进入fn();
var name='zhangsan';
/*
 GO{
   name:'zhangsan',
  fn :function fn(){}
 }
* */

function fn(){
/*
 GO{
   name:undefined,
  fn :function fn(){}
 }
* */



  /*
  AO {
    c:undefined;
  }
  * */
  console.log(c) // undefined
  console.log(name) // undefined
  var c=2;
  /*
 AO {
   c:2;
 }
* */
  console.log(c)

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值