我是靠谱客的博主 英俊嚓茶,最近开发中收集的这篇文章主要介绍js预编译,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  1. 预编译分为全局预编译和局部预编译,全局预编译发生在页面加载完成时执行,而局部预编译发生在函数执行的前一刻。
  2. 预编译阶段变量声明和函数声明,没有初始化行为(赋值),匿名函数不参与预编译 。只有在解释执行阶段才会进行变量初始化
  3. 首先JavaScript的执行过程会先扫描一下整体语法语句,如果存在逻辑错误或者语法错误,那么直接报错,程序停止执行,没有错误的话,开始从上到下解释一行执行一行
  4. 全局预编译3个步骤:
    创建GO对象(Global Object)全局对象。
    找变量声明,将变量名作为GO属性名,值为undefined
    查找函数声明,作为GO属性,值赋予函数体
  5. 局部预编译的4个步骤:
    创建AO对象(Activation Object)执行期上下文。
    找形参和变量声明,将变量和形参名作为AO属性名,值为undefined
    将实参值和形参统一。
    在函数体里面找函数声明,值赋予函数体。

全局预编译。

global = 100;
function test(){
console.log(global);	//undefined
var global = 200;
console.log(global);//200
var global = 300;
}
test();
var global;
function fn(a){
console.log(a);
//根据AO对象中的数据第一个打印的是:fn()
// 变量声明+变量赋值(只提升变量声明,不提升变量赋值)
var a = 123;
// 执行到这时,由于变量赋值是不提升的,所以函数被123覆盖了
console.log(a);
// 123
// 函数声明
function a(){};
// 这里被提升上去了,可以忽略
console.log(a);
// 123
// 函数表达式
var b = function(){};
console.log(b);
// 根据AO对象中的数据:fn()
// 函数
function d(){};
}
//调用函数
fn(1);

最后

以上就是英俊嚓茶为你收集整理的js预编译的全部内容,希望文章能够帮你解决js预编译所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部