在JavaScript中,一对括号意味着什么

在JavaScript中,一对括号意味着什么,javascript,Javascript,我在看书。在本书中,作者给出了以下代码: function execute(code) { eval(code); function subroutine(){ return window; } var w = subroutine(); //what value is w? }; 他用以下语句运行函数: execute("var window = {};") 他说: 在本例中,eval()在execute()中创建一个局部窗口变量,因此 最终等于本地窗口而

我在看书。在本书中,作者给出了以下代码:

function execute(code) {
  eval(code);

  function subroutine(){
    return window;
  }

  var w = subroutine();

  //what value is w?
};
他用以下语句运行函数:

execute("var window = {};")
他说:

在本例中,eval()在execute()中创建一个局部窗口变量,因此 最终等于本地窗口而不是全局窗口。没有 在执行代码之前知道是否是这种情况的方法 表示无法预先确定窗口标识符的值


我不知道空括号
(code)是什么意思这里的意思。我尝试了他的代码,得到了作为全局窗口实例的w。不是“创建的本地窗口”(空对象)。我想知道发生了什么…

发生的是代码示例中的
eval()
执行该字符串中的代码。该代码创建一个名为
window
的局部变量,并为其分配一个空对象

关键是,对于该特定字符串,subroutine()中的
窗口
引用该变量,但是如果它是一个完全不同的字符串,没有提及
窗口
,则subroutine中的
窗口
可能最终引用全局
窗口
对象


关键是,对于编写代码的人和试图优化代码的JS引擎来说,这完全是疯了。因此,您应该避免这样做。

{}
是一个对象文字,创建一个空白对象


然而,他的代码是完全错误的。您不能只执行这样的任意代码-您需要使用
eval()
。因此,没有本地
窗口
对象。他只是忽略了一个字符串,返回了真正的窗口。

书中的代码使用
eval
。问题中有一个抄写错误。我也怀疑像你们一样。但是作者在这段代码之前说:“try-catch语句的with语句和catch子句,以及包含()的函数都被认为是动态作用域。”。那么,他在这句话中所说的“()”是什么意思呢?正如我一直在说的,你的书有问题。实际的书中说,“无论是
with
语句还是
try-catch
语句的
catch
子句,以及包含
eval()
的函数,都被认为是动态作用域。”似乎不知何故,“eval”的所有出现都被剥离了。你读的是这本书的正版吗?这里没有纯粹的
(code)那里。也许你正在读这本书的伪造盗版版本?这个问题似乎离题了,因为OP使用的是通过XSS过滤器发送的这本书的副本,并且删除了所有出现的
eval
。非常感谢你的回答。但这不是我想知道的。我想知道的是,一对空括号和一个字符串(描述js语句)意味着什么。就像语句
(code)一样在作者的代码中。@cosmozhang
(代码)什么都不做。你的这本书有点不对劲,因为实际的那本书没有。好吧,这真的很可悲:(……谢谢你~@cosmozhang真正可悲的是不用付钱就使用了作者的作品。请买这本书(或者至少从买书的人那里借)是的,你说得对。我稍后会从我们的图书馆买到一本正版的书。