当前位置: 代码网 > it编程>编程语言>Javascript > JavaScript预编译的基本概念和过程详解

JavaScript预编译的基本概念和过程详解

2024年06月11日 Javascript 我要评论
全局预编译创建全局对象(global object, go):在浏览器中,全局对象是window对象。处理变量声明:找到所有的变量声明,将变量名作为全局对象的属性名,初始值为undefined。处理函

全局预编译

  • 创建全局对象(global object, go)
    • 在浏览器中,全局对象是window对象。
  • 处理变量声明
    • 找到所有的变量声明,将变量名作为全局对象的属性名,初始值为undefined
  • 处理函数声明
    • 找到所有的函数声明,将函数名作为全局对象的属性名,值为函数对象(整个函数体)。

示例:

console.log(a); // undefined
var a = 10;
console.log(foo); // function: foo
function foo() {
    return "hello";
}

全局预编译后的全局对象:

1.创建go对象
go{
    // 空对象
}

2.处理变量声明
go = {
    a: undefined
}

3.处理函数声明
go = {
    a: undefined,
    fn: function() {}
}

函数预编译

  • 创建活动对象(activation object, ao)
    • 每次调用函数时,都会创建一个新的活动对象。
  • 处理形参和变量声明
    • 将形参和变量名作为活动对象的属性名,初始值为undefined
  • 形参和实参统一
    • 将实参值赋值给对应的形参。
  • 处理函数声明
    • 找到所有的函数声明,将函数名作为活动对象的属性名,值为函数对象。

示例:

function bar(x, y) {
    console.log(x); // function: x
    var x = 20;
    console.log(x); // 20
    function x() {}
    console.log(x); // 20
    var y = function() {};
    console.log(y); // function: y
}
bar(2);

函数预编译后的活动对象:

1.创建ao对象
ao{
    //空对象
}

2.处理形参和变量声明,值为undefined
ao = {
    x: undefined,
    y: undefined,
}

3.实参和形参统一
ao = {
    x: 2,
    y: undefined
}

4.处理函数声明
ao = {
    x: 2,
    y: function() {},
    x: function() {}
}

总结

通过预编译,javascript确保在代码执行时,所有变量和函数都已经声明完毕,避免引用错误。这一机制是理解javascript作用域和提升(hoisting)的基础。

到此这篇关于javascript预编译的基本概念和过程详解的文章就介绍到这了,更多相关javascript预编译内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com