此代码中发生了什么,如果没有“with”关键字,以下内容的基本实现是什么
what is happening in this code and what will be the basic implementation of the following without the "with" keyword
我正在浏览一个代码库,该代码库正在为JavaScript创建一个多平台包管理和模块系统。
我找到了一条代码路径,该路径是从与"export"变量关联的函数中提取的。我在下面附加了代码片段,在运行代码片段时,您会发现"print"对象从函数中提取。我想知道两件事:-
- 这段代码是如何工作的?
- 是否可以在没有 with 语句的情况下以更简单的方式实现此代码?
var context = {
exports: {}
};
var fn = (function(args) {
with(args) {
return function logger() {
exports = {
print: function(res) {
console.log(res);
}
}
}
}
});
fn = fn(context);
fn.call();
context.exports.print('hello World'); //Prints the hello world
首先,计算非字符串是没有意义的。删除eval
调用并仅使用该函数。
从技术上讲,with
语句是这样做的:
with
语句为 计算对象到当前词法环境 执行上下文。然后,它使用此增强的语句执行 词汇环境。最后,它恢复了原始词汇 环境。
基本上,这意味着当您将对象分配给标识符exports
时,它将成为 args
的属性。
别这样。with
语句性能不佳,在严格模式下不允许。只需正常分配属性即可。
var fn = function(args) {
return function logger() {
args.exports = {
print: function(res) {
console.log(res);
}
}
}
};
相关文章:
- 实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
- 在 Javascript 中实现解耦代码/回调的正确方法是什么?
- 在Javascript中实现GroupBy最有效的方法是什么
- 使用ui路由器实现动态URL路由的最佳方式是什么
- ColdFusion的listFindNoCase函数在Javascript中最快的实现是什么?
- 实现此过滤的好方法是什么
- 在浏览器环境之外充分实现WebGL兼容性所需的最小功能是什么?
- 实现 Porthole 的正确方法是什么.js根据内容高度调整 iframe 的大小
- 实现 toFixed() 的最可靠方法是什么
- 此代码中发生了什么,如果没有“with”关键字,以下内容的基本实现是什么
- 使用redux实现事务的正确方法是什么
- 用javascript实现if-then-else-if-else堆栈的更简单方法是什么
- 在javascript密集的应用程序中实现SEO友好性的策略的一个很好的例子是什么
- 画布中多层实现的机制是什么?
- 这部分代码在“Pro JavaScript技术”的JS addEvent函数实现中的目的是什么?
- 使用 Flask 实现强制页面刷新的最佳方法是什么?
- 实现文本大小可访问性特性的最佳方法是什么?
- 在CSS中实现动态主题的好技术是什么?
- 在实时web应用程序中实现基于事件的授权的最佳方式是什么?
- 在promise . all中实现长承诺链的最佳实践是什么?