已掉线,重新登录

首页 > 绿虎论坛 > 杂类 > 超级灌水 (发帖)

有没有对JS了解比较深的朋友


『回复列表(42|隐藏机器人聊天)』

20.

@SKSlience,不能反推答案,先知道了结果再去找代码不同,然后得出结论。我不管是调试,还是分析a变量作用域都在Local Scope,只是预编译过程黑箱了,不知道其中的过程
红米K30 Pro 变焦版

(/@Ta/2021-05-12 09:46//)

21.

@Curtion@水木易安@SKSlience,这段代码没有任何ES6关键字,所以必须手动进入严格模式。严格模式和非严格模式结果不同。

IMG_20210512_102044.jpgIMG_20210512_102127.jpg

(/@Ta/2021-05-12 10:23//)

22.
用户被禁言,发言自动屏蔽。
(/@Ta/2021-05-12 10:50//
被禁言
)

23.

@老虎会游泳, 这样看来在严格模式下会影响块级作用域中定义函数的行为,最后我找到了一个标准说明,或许和这个有关系 https://262.ecma-international.org/6.0/#sec-block-level-function-declarations-web-legacy-compatibility-semantics 这样看来这应该属于一个未定义行为,是语言标准之外的东西
红米K30 Pro 变焦版

(/@Ta/2021-05-12 10:50//)

24. @老虎会游泳,在非严格模式下- -,为啥第二次是输出了123.。。。。。。难道是function a 给刷了外面的a地址的值?
(/@Ta/2021-05-12 10:56//)

25.

D29682CB-7BFC-4441-831C-3817236503BA.jpeg
AE6A263A-3DD7-4EC2-A0F4-87A08A1010B7.jpeg
3A941C92-D3B2-4E14-965B-FDC534B778F0.jpeg
E82FE363-A9FC-4996-845D-D3AC30717D2A.jpeg
小米MIX2s(白)

(/@Ta/2021-05-12 11:09//)

26.

@SKSlience,我只能说:非严格模式的ES5有怪异的行为。谁知道它到底是怎么处理的
注意不是ES6,因为代码没有ES6关键字或者功能,不能自动推定为ES6。

(/@Ta/2021-05-12 11:12//)

27.

6CE9C742-36BB-4C7A-9545-1A4AED78B6C3.jpeg
小米MIX2s(白)

(/@Ta/2021-05-12 11:17//)

28.

@SKSlience,可以这样解释:

  1. var afunction a是两个不同的变量。
  2. 在全局的var a存在时,ES5非严格模式没有函数提升,所以a = 123;是给var a赋值。然后后面的a = 456;是给function a赋值。

此时就得到了如下结果:

也就是说,对于ES5非严格模式,如果运行一个赋值语句时被赋值的变量已存在,则函数提升没有必要发生,所以不会发生。

(/@Ta/2021-05-12 11:29//)

29.

<!-- markdown -->
@老虎会游泳,函数提升在预编译阶段实现,而赋值在运行阶段,很明显我们不是在做延迟选择量子擦除实验。解释我倾于像16楼我说的那样,参考来自 https://stackoverflow.com/questions/31419897/what-are-the-precise-semantics-of-block-level-functions-in-es6
红米K30 Pro 变焦版

(/@Ta/2021-05-12 11:25//)

30.

@Curtion,那么问题来了

延迟选择量子擦除实验 是什么?
小米MIX2s(白)

(/@Ta/2021-05-12 11:27//)

31.

@水木易安,我说错了,其实想表达的是惠勒延迟选择实验,实验内容: https://www.bilibili.com/video/BV1x4411T7dg ,大概意思就是这个实验看起来像是颠倒了因果关系
红米K30 Pro 变焦版

(/@Ta/2021-05-12 11:30//)

32.

@Curtion,薛定猫的锷
小米MIX2s(白)

(/@Ta/2021-05-12 11:31//)

33.

@水木易安,是的,和量子力学有关
红米K30 Pro 变焦版

(/@Ta/2021-05-12 11:37//)

34.

@Curtion,那么也可以这样理解:
在以下代码中:

  1. var afunction a是两个不同的变量。无论这是怎么造成的,这就是我们观察到的结果。
  2. 赋值语句按照字面顺序绑定给对应的变量。所以a = 123;绑定给var a,然后a = 456;绑定给function a
var a = 0;
{
        a = 123;
        function a() {}
        a = 456;
        console.log(a);
}
console.log(a);
(/@Ta/2021-05-12 11:41//)

35.

@老虎会游泳,如果按照字面顺序解释的话,那么只需要稍微改一下代码:

var a = 0;
{
  a = 123;
  a = 456;
  function a() {}
  console.log(a);
}
console.log(a);

那么应该输出 [Function: a]456 ,实际上输出 456456

我用``好像没有识别出来呢
红米K30 Pro 变焦版

(/@Ta/2021-05-12 12:17//)

36.

@Curtion,markdown代码块的下方必须有空行,这是解析器的局限性。如果没有空行,下一行的markdown不会被解析。

(/@Ta/2021-05-12 12:18//)

37.

看了你们的讨论过程,我的问号更多了
人生若只如初见

(/@Ta/2021-05-12 13:07//)

38.

@枫叶飘,正常,由于历史原因,js本身是有缺陷的。
我觉得可以停止观战了。
令人迷惑的东西就应该避免,而不是用作谈资。

https://www.zhihu.com/question/387134172

小米MIX2s(白)

(/@Ta/2021-05-12 13:40//)

39. - -, 太随意还是有可能有问题吧
(/@Ta/2021-05-12 14:01//)

下一页 上一页 2/3页,共42楼

回复需要登录

8月3日 18:23 星期天

本站由hu60wap6驱动

备案号: 京ICP备18041936号-1