Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript:获取解释器中返回的最后一个值的方法_Javascript_Interpreter - Fatal编程技术网

javascript:获取解释器中返回的最后一个值的方法

javascript:获取解释器中返回的最后一个值的方法,javascript,interpreter,Javascript,Interpreter,我试图找到一种方法,以编程方式获取Javascript解释器返回的最后一个值。举个例子,Ruby的解释器有“\ux”: 我想知道Javascript中是否存在同样的东西 编辑: 另一种可能实现这一点的方法。是否有任何语法支持换行符中表达式的延续?大概是这样的: var a = \& 1 + 2; a #=> 3 <script> var json_struct = </script> <script src="http://domain.co

我试图找到一种方法,以编程方式获取Javascript解释器返回的最后一个值。举个例子,Ruby的解释器有“\ux”:

我想知道Javascript中是否存在同样的东西

编辑:

另一种可能实现这一点的方法。是否有任何语法支持换行符中表达式的延续?大概是这样的:

var a = \&
    1 + 2;
a #=> 3
<script> var json_struct = </script>
<script src="http://domain.com/myjsonfile.json" type='application/json' ></script>
某种类型的字符组合告诉解释器表达式以换行形式继续(如+表示字符串串联)

目的:

本研究的目的是发现我是否可以使用脚本标记加载JSON数据结构,并从其范围之外成功地分配它,如下所示:

var a = \&
    1 + 2;
a #=> 3
<script> var json_struct = </script>
<script src="http://domain.com/myjsonfile.json" type='application/json' ></script>
var json_struct=
顺便说一句,这是行不通的。令人惊讶的是:)

目的:

本研究的目的是发现我是否可以加载JSON数据结构 使用脚本标记并从其范围外成功分配它

基于浏览器的javascript中没有任何构造可以做到这一点

原因是,从最早的Netscape时代起,浏览器总是在关闭脚本标记时启动脚本编译器。不管它是javascript、VBscript(仅IE)还是Tcl(带有适当的插件)

这意味着任何不完整的语句都将被视为语法错误。每个
标记基本上被视为一个文件

您尝试在Ruby中执行的操作与此类似:

a = require 'one_plus_two.rb'
我认为这在Ruby中不起作用


但是,在支持Node.js等模块的非浏览器环境中,导入模块的方法实际上会返回一个值(通常是一个对象)。因此,您可以在node.js中执行以下操作:

var a = require('my_data_file.js');
不幸的是,
require
函数仅适用于本地文件。但是Node.js是开源的,所以您可以随时使用它并修改
require
,以便能够像PHP一样从
http://
进行源代码开发


唉,如果您试图做的是浏览器脚本,那么上面这一点是没有意义的。

在什么环境下?在node中,在终端中,这正是您在问题中提到的。好吧,所有的环境,所有的解释器(如果所有脚本都由浏览器解释器解释,那么我也希望在我的脚本中使用它,我肯定会发现它的一些用途)。没有这样的事情。事实上,您甚至不能在Ruby或Python中使用u,因为它是REPL在计算最后一个表达式后分配给的特殊值。它不可在脚本中使用,因为程序执行不一定是确定性的,因此没有“last”值。在Ruby或Python中,最接近的方法是获取函数中的最后一个堆栈帧。Ecmascript规范中也没有这样的东西,因为这是依赖于实现的。我已经编辑了这个问题,也许你对此有什么要说的。仍然不清楚你想要实现什么。只要代码行不在终端结束,就可以在JS中以任何方式格式化代码。阅读ECMAScript语法,找出终端是什么。答案很好,可以澄清一些问题。现在,假设我有一个脚本标记加载一个js文件,该文件只有“var a=”内容。假设我在加载json文件之后有一个脚本标记。现在让我们假设两个脚本都被标记为延迟。在延迟情况下,脚本编译器不应该将两个脚本当作一个脚本进行评估吗?这是一个非常长的答案,说明的很少。它与Node和Netscape有什么关系?最简单的答案是,每个脚本标记形成一个计算上下文,这意味着脚本标记中的所有内容都作为字符串以程序树的形式提供给eval(),然后进行解析。您不能在脚本标记内执行任何不能被解析为有效JS程序的操作。仅此而已。其他一切都无关紧要。@ChuckE:不。延迟只会延迟脚本的执行。每个脚本都是单独编译的。因此,json数据是一个有效的脚本,但是
var a=
是一个语法错误。@Y.HWong:这正是我在没有使用技术术语的情况下所说的(我假设OP更熟悉Ruby,所以我给出了他可能熟悉的示例)。在讨论javascript时,我尽量避免使用“上下文”一词,因为它在其他语言中的含义并不相同。至于Netscape——如果javascript语言在历史背景中得到最好的理解,那么整个设计(因为规范通常是通过检查当前浏览器的工作方式而不是按照规范编写的浏览器来编写的)。至于Node——见他的目的。他并不是严格地问脚本标记是如何工作的,他想知道JS中是否有任何机制(不一定使用单独的脚本标记)可以做他想做的事情。事实证明,Node确实实现了他想要的功能(有人说未来的浏览器会采用模块),但当前的浏览器没有。