在 JavaScript 中,一个括号是什么意思
what does a single couple of brackets mean in JavaScript
我正在阅读高性能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作为全局窗口实例。不是"创建的本地窗口"(空对象)。我想知道发生了什么...
发生的情况是代码示例中的eval()
执行该字符串中的代码。该代码创建一个名为 window
的局部变量,并为其分配一个空对象。
关键是,对于该特定字符串,subroutine() 中的window
引用该变量,但如果它是一个完全不同的字符串,没有提及window
,则子例程中的window
可能最终引用全局window
对象。
拥有可预测的代码而言,这完全是疯狂的,无论是对于编写代码的人,还是对于试图优化它的JS引擎,因此您应该避免这样做。
{}
是一个对象文字,创建一个空白对象。
但是,他的代码是完全错误的。你不能像这样执行任意代码 - 你需要使用eval()
.因此,没有本地window
对象。他只是忽略了一根绳子,并返回了真正的窗口。
相关文章:
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- 将任何CDN配置为只传递一个文件,无论请求的url是什么
- 在这个使用hasOwnProperty的对象扩展程序中有一个错误,I'我不确定那个bug是什么,也不确定这个扩展
- 依赖css的javascript的一个好例子是什么
- 是什么让新的Date() / 1000成为一个有效的javascript
- 当我想发布一个变量但有 1 个 js 时,ajax post 的解决方案是什么
- 当一个模型在骨干关系中被销毁时,销毁相关模型的最佳方法是什么?
- 获取字符串中最后一个换行符的最有效方法是什么
- 如果我只想从数组中打印任何一个元素.任何数组.那么代码会是什么
- 将一个函数及其参数传递给另一个函数以执行它的语法是什么
- 制作一个支持mkdir和ls等基本命令的在线Linux控制台的好方法是什么
- 什么'最合适的数据结构是什么?(使用一个有间隙的数组是否存在缺点或注意事项?)
- 用javascript在一个对象的两个键上声明两个数组的简洁方法是什么
- 淘汰抛出消息:类型错误:
不是一个函数.什么意思 - 将复杂内容(想想整个网页树)从一个 Web 应用程序提供给另一个网站的最佳可重用解决方案是什么?
- 在 JavaScript 中,一个括号是什么意思
- 单击另一个用于显示/隐藏图层的按钮时,在Adobe PDF中隐藏/显示按钮的代码是什么
- 在角度 api 中$watch返回一个取消注册函数,用于此侦听器取消注册的含义是什么
- 配置早午餐以从一个模板文件输出多个 HTML/JS 文件的正确方法是什么?
- 在ES2015中定义一个类,构造函数方法是什么以及为什么它是必不可少的