最新公告
  • 欢迎您光临码农资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!加入我们
  • 揭秘 JavaScript:深入探讨提升、临时死区和可变状态

    揭秘 javascript:深入探讨提升、临时死区和可变状态

    下面我有两行甜蜜而简单的代码。但我可以向你保证,它要么会让你很困惑(因为你忽略了 js 的下划线原则),要么安慰你。

    但是它已经加载了如下的知识概念

    • 吊装
    • 暂时死区
    • 变量(未声明、未初始化、未定义)(奖励)

    我的矛盾声明
    就像 var、const 和 let 也提升了它们的属性,但它们位于不同的区域。

    吊装def(简单/外行版)

    1. 我们可以在实际声明之前访问函数和变量。

    现在是时候深入了解 js 如何编译和执行我们的两行代码了

    立即学习Java免费学习笔记(深入)”;

    在 javascript 中,编译器和引擎处理变量声明和赋值的方式可能有细微差别,尤其是在处理 let 和 var 时。
    让我们从编译器和执行的角度来分解给定代码的过程:

    name = 'ashu';
    let name;
    

    此时我明确表示,当我们编写 javascript 代码时,第一个解析器和编译器会编译我们的代码,然后进入执行阶段。

    编译器视角
    第一行: name = ‘ashu’;

    编译阶段
    javascript 引擎解析代码并创建必要的范围。
    作业名称 = ‘ashu’;

    会注意到,但是在这个阶段,引擎不会执行代码;它仅记录对名为 name 的变量的赋值的存在。

    如果之前没有声明过 name ,编译器会将其视为对全局变量(全局范围内的 var name )的赋值,因为 var 声明是提升并全局可访问的。

    第二行: 让名字;

    当编译器遇到let名字时;声明,它承认name应该是块作用域的。

    编译器将名称放入临时死区(tdz)对于它所属的范围,
    意思是它承认名称的存在,但将其标记为未初始化.

    let 声明不像 var 那样被提升。

    相反,它在作用域中创建一个 绑定,并仅在执行声明时初始化它

    执行视角

    第一行: name = ‘ashu’;

    当 javascript 引擎执行赋值 name = ‘ashu’; 时,
    它检查当前范围内名称是否存在。由于 name 是用 let 声明的,但位于 tdz(暂时死区)中, 在 let 声明初始化之前尝试访问它将会导致 referenceerror。

    因此,此时name在tdz中,赋值name = ‘ashu’;导致引用错误.


    第二行: 让名字;

    这一行初始化块作用域内的 name 变量。
    此后,名称不再位于 tdz 中,并且可以毫无错误地访问或分配。

    现在奖励小费

    未声明与未定义与未初始化之间的区别;

    undeclare :- 变量尚未声明。
    undefined :- 变量已声明但未初始化;
    未初始化 :- 变量已定义,但其值将在稍后部分出现。

    例如:- const result =multiplyby2(5);

    直到函数的返回值将分配给结果,直到那时它将处于未初始化区域。

    有趣的事实:-

    你知道临时死区最初是为

    const装饰的,但他们在**let**中采用了较晚的时间点

    参考:-

      https://frontendmasters.com/courses/deep-javascript-v3 + 我与 github 副驾驶的类比

    想要了解更多内容,请持续关注码农资源网,一起探索发现编程世界的无限可能!
    本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
    如有侵权请发送邮件至1943759704@qq.com删除

    码农资源网 » 揭秘 JavaScript:深入探讨提升、临时死区和可变状态
    • 7会员总数(位)
    • 25846资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 294稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情