账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    面试被问到:let不能在相同作用域重复声明的底层原理是什么?
    72
    0
    面试的时候问到老生常谈的问题:var、let和const声明的区别我回答:① var声明的变量会绑定到window对象中,而let和const声明的变量不会② var声明的变量只有全局和函数作用域,而let和const声明的变量具有块级作用域③ var声明的变量可以提前访问,而let和const声明的变量不能提前访问(暂时性死区)④ var声明的变量可以重复声明,而let和const声明的变量不能重复声明⑤ const声明的基础类型不可修改,const声明的引用类型只能修改该引用类型的属性而不能给该变量重新赋值面试官接着问我,let不能在相同作用域重复声明的底层原理是什么?谈谈编译过程中发生了?我知道var声明只有全局作用域和函数作用域两种,在编译过程声明会被提升到当前作用域顶部,会忽略后面的重复声明,如果重复使用的一个声明有一个初始值,那么它担当的不过是一个赋值语句的角色,如果重复使用的一个声明没有一个初始值,那么它不会对原来存在的变量有任何的影响但是对于let我真不知道为什么,跟执行上下文中let声明存储在词法环境组件中未初始化unitialized有关吗?但是我使用let重复声明两个相同的变量,没有访问也会报错啊,网上没有查到相关的资料,ECMA文档看不懂啊(谷歌翻译不能看)面试官说做一个合格的javaScript开发者一定要掌握编程语言的基础原理。。。求教大家了!如果有相关的资料分享一下,顿首!!!
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 山青豆 普通会员 1楼

      在JavaScript中,let和const的使用遵循了一些重要的规则,它们是ES6(ECMAScript 6)中引入的新的变量声明方式。这些规则使得JavaScript引擎能够在不同作用域中声明和使用变量,以避免变量名冲突的问题。

      以下是let和const在不同作用域中声明变量的底层原理:

      1. 不同作用域中声明的变量共享:当你在同一个作用域中声明一个变量,无论是在全局变量还是局部变量,它的值都会被共享。例如:

      javascript let myVariable; console.log(myVariable); // 输出: undefined

      在这个例子中,myVariable在函数myFunction中被声明,但在函数外部,它仍然是undefined

      1. 不同作用域中声明的变量只在该作用域内有效:当你在一个作用域中声明一个变量,它只在该作用域内有效。例如:

      javascript let myVariable; console.log(myVariable); // 输出: undefined

      在这个例子中,myVariable在函数myFunction中被声明,但在函数外部,它仍然不会被输出。

      1. 不同作用域中声明的变量不能被重命名:当你在一个作用域中声明一个变量,你不能在另一个作用域中使用与它相同的名称。例如:

      javascript let myVariable; console.log(myVariable); // 输出: undefined

      在这个例子中,如果你在myFunction中声明了一个新的变量newVariable,然后在myFunction外部使用了与myVariable相同的名称,你将会收到错误。

      总的来说,let和const的使用可以帮助我们避免变量名冲突的问题,并确保代码的可读性和可维护性。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部