控制台窗口如何在内部处理 JavaScript 算术赋值?返回值从哪里来?

Posted

技术标签:

【中文标题】控制台窗口如何在内部处理 JavaScript 算术赋值?返回值从哪里来?【英文标题】:How does the console window handle JavaScript arithmetic assignment internally? Where is the returned value coming from? 【发布时间】:2016-09-17 04:47:22 【问题描述】:

我最近一直在玩 javascript,而我正在学习的这门课程不断强调从内部了解 JavaScript 的重要性。

所以我有一个奇怪的问题,主要是我试图了解 JavaScript 内部是如何工作的。

假设我在控制台中进行以下计算:

>> x = 1
<  1
>> x = x + 2
<  3

那里返回的“3”,它究竟来自哪里?

就像它是先评估'x + 2',然后返回3并将内存中x的值设置为3?或者它会计算 'x + 2',将其保存在 x 的内存空间中,然后从同一内存空间返回 x 的值?

或者甚至只是改变 x 在其内存空间中的值而不移动它,然后返回 x 的值?

如果我也可以了解更多关于 JavaScript 内部工作原理的信息,我也将不胜感激,以回答更多此类问题。

谢谢!

【问题讨论】:

控制台中打印的值只不过是最后一次操作的输出。试试x=x+2,name=100;..会给你更好的主意.. 是的,我更关心的是如何在内存中计算输出本身(与变量相关)。基本上试图了解控制台返回的确切内容,只是为了更好地了解 JS 内部。 这更像是一个 REPL 的东西,而不是我所说的 JavaScript 的东西 好吧..我认为这个问题更多的是关于 Chrome-Dev-Tools... @SamiKuhmonen,刚刚用谷歌搜索并阅读了 REPL,听起来你很准确。将其添加到标签中,谢谢! 【参考方案1】:

如果您曾经在像 Unix 这样的基于终端的系统上工作过,那么会更容易理解发生了什么。将控制台想象成一种bash 终端。如果您在命令行终端中键入命令并按回车键,它将以输出响应,有时甚至会出现错误。

Chrome 控制台中正在发生类似的事情。每次打开 Chrome 控制台时,它都会保留一个会话,用于存储变量和函数。当您调用或使用相同的变量或函数时,它只是返回该值。

顺便说一句,当您键入类似

的内容时
>> x = 1

内部发生的是在全局window 对象中创建了一个名为x 的新属性。所以x = 1window.x = 1 相同。这就是控制台如何记住您的分配并在您调用它时使用它的方式。

我希望我设法迷惑了你,所以我会在这里停下来。

【讨论】:

不,不会造成混乱!我现在正在学习的课程实际上很好地解释了窗口部分,this.x 也可以工作:) – 虽然我正在寻找更多关于 JS 如何在内存中“处理”变量,比如返回值,它在哪里究竟来自哪里?【参考方案2】:

您可以进一步查看您的示例以查看其逻辑

>> x = 1
<  1
>> y = x = x + 2
<  3
>> x == y
<  true

它基本上是行的输出。您在浏览器上看到的一些功能是在 Javascript 引擎之上实现的。这里是my favorite talk,与主题略有关联。

【讨论】:

以上是关于控制台窗口如何在内部处理 JavaScript 算术赋值?返回值从哪里来?的主要内容,如果未能解决你的问题,请参考以下文章

spring/hibernate 如何为我们提供防止 SQL 注入的保证以及它是如何在内部处理的?

我的 C# win 表单应用程序在内部调用批处理脚本,如何在 Visual Studio 中导出时对最终用户隐藏它?

带有肤色的表情符号如何在内部表示? [关闭]

[TimLinux] JavaScript 代码控制滚动条移动到顶部/底部

GCM 之类的推送通知如何在内部工作?

mllib 如何在内部对不平衡数据集的类进行加权?