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

时间:2015-01-22 10:18:54

标签: javascript

我正在阅读High Performance JavaScript。在本书中,作者给出了以下代码:

function execute(code) {
  eval(code);

  function subroutine(){
    return window;
  }

  var w = subroutine();

  //what value is w?
};

他用以下语句运行该函数:

execute("var window = {};")

他说:

  

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

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

2 个答案:

答案 0 :(得分:2)

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

关键是,使用该特定字符串,子例程()中的window引用该变量,但如果它是一个完全不同的字符串而没有提及window,那么{{子例程中的1}}可能最终引用了全局window对象。

关键在于,对于编写代码的人以及尝试优化代码的JS引擎而言,这对于具有可预测的代码而言完全是疯狂的。因此,您应该避免这样做。

答案 1 :(得分:0)

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

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