首页 > Web开发 > 详细

预编译 - js函数高级

时间:2021-07-29 22:06:39      阅读:14      评论:0      收藏:0      [点我收藏+]

JS运行机制

  • 语法分析

  • 预编译

  • 解释执行

预编译

  • 函数声明整体提升

  • 变量声明变量名提升

预编译前奏

  • 如果变量未声明就赋值,此变量为全局对象所有

var a = b = 123 //在局部作用域中声明

此时b为全局变量

  • 一切声明的全局变量,全为window的属性

预编译开始

  • 创建AO对象

  • 形参变量声明,将形参名变量作为AO属性名,值为undefined

  • 将实参值和形参统一

  • 在函数体里面找函数声明,值赋予函数体

function fn(a) {
  console.log(a)

  var a = 123
  console.log(a)

  function a() {}
  console.log(a)

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

  function d() {}
}
fn(1)
  1. 创建AO对象(Activation Object)[执行期上下文]

AO {}

  1. 处理AO对象,设置AO的key
AO {
  a: undefined,
  b: undefined
}
  1. 参数统一
AO {
  a: 1,
  b: undefined
}
  1. 函数声明处理
AO {
  a: function a() {},
  b: undefined,
  d: function d() {},
}

预编译发生在函数执行前一刻

  1. 执行函数
  • 处理赋值,将变量值赋值给相关的变量名
打印输出:

function a() {}

123

123

function () {}

Go (Global Object) 就是window,同时GO的预编译和AO一样

预编译 - js函数高级

原文:https://www.cnblogs.com/lonelyman/p/15076679.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!