预编译

来源:互联网 发布:富人国 知乎 编辑:程序博客网 时间:2024/05/22 13:03

1.js运行三部曲

  1. 语法分析
  2. 预编译(发生在函数执行的前一刻)
  3. 解释执行

预编译前奏
//函数声明整体提升
//变量    声明提升
1.imply global 暗示全局变量:即任何变量,如果变量未经声明就赋值,此变量就为全局对象所有

eg: a = 123;eg: var a = b = 123;

2.一切声明的全局变量,全是window的属性

eg: var a = 123; ==> window.a = 123;

预编译四部曲:
1.创建AO对象
2.找形参和变量声明,将变量和形参名作为AO属性名,值为undefined
3.将实参值和形参统一
4.在函数体里面找函数声明,值赋予函数体

function fn(a){    console.log(a);//function a(){}    var a = 123;    console.log(a);//123    function a(){}    console.log(a);//123    var b = function(){}    console.log(b);//function(){}    function d(){}}fn(1);1.创建AO Activation Object(执行期上下文)AO{    a:123,    b:function(){},    d:function d(){}}

全局生成了一个GO对象Global Object

var a = 123;function a(){}console.log(a);//123GO ===window{    a:123}
原创粉丝点击