控制台窗口如何在内部处理 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 = 1
与window.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 中导出时对最终用户隐藏它?