JS变量封禁大法:薛定谔的X

如果你在 HTML 里写

<script>let x = x</script> <!-- 后面的 x 可以换成任意一个不存在的变量 -->

那么,其他 script 都无法在全局作用域下使用 x 变量了,无论是对 x 进行赋值、取值,还是声明,都不行。

也就是说现在 x 处于一种「既被定义了,又没被定义」的中间状态。



有点意思~


这个问题说明:如果 let x 的初始化过程失败了,那么

  1. x 变量就将永远处于 created 状态。
  2. 你无法再次对 x 进行初始化(初始化只有一次机会,而那次机会你失败了)。
  3. 由于 x 无法被初始化,所以 x 永远处在暂时死区(也就是盗梦空间里的 limbo)!
  4. 有人会觉得 JS 坑,怎么能出现这种情况;其实问题不大,因为此时代码已经报错了,后面的代码想执行也没机会。

详见:

方应杭:我用了两个月的时间才理解 letzhuanlan.zhihu.com图标

编辑于 2019-10-08