gpt4 book ai didi

javascript - "with"语句的效率如何?

转载 作者:行者123 更新时间:2023-11-29 10:45:32 25 4
gpt4 key购买 nike

有些关键字很难用Google搜索,比如“with”这个词,所以我在这里测试一下。

JavaScript 中的with 语句是低效的吗?

例如,假设我有:

with(obj3) {
with(obj2) {
with(obj1) {
with(obj0) {
eval("(function() { console.log(aproperty) })();");
}
}
}
}

如果我遍历 obj0、obj1、obj2、obj3 并将它们合并在一起,然后使用其中一个,那么上面的方法会更有效还是更不有效:

  1. 一个单独的声明
  2. 使用 obj0、obj1、obj2 和 obj3 的键创建了一个参数字符串,并为值创建了一个args数组并使用:

    eval("function fn(aproperty, bproperty) { console.log(aproperty); }")
    fn.apply(undefined, args);

这三种方法中哪一种可以被认为更快?我在猜测 with 语句,但这么多 with 让我觉得我可以进一步优化它。

最佳答案

如果您正在寻找选择,那么您可能需要考虑第三种方法,即创建(如果需要,即时)对象原型(prototype)链。


编辑:我的解决方案被破坏了。它需要非标准的 __proto__ 属性。我正在更新以修复它,但请注意,这并非在所有环境中都受支持。


var objs = [null,obj3,obj2,obj1,obj0];

for (var i = 1; i < objs.length; i++) {
objs[i].__proto__ = Object.create(objs[i-1]);
}

var result = objs.pop();

这避免了 with 并且应该比合并更快,尽管只有测试才能说明问题。


然后,如果您只需要具有某些属性的产品,这将非常快。

var props = ["x2","b1","a3"];
var product = result.y3;

for (var i = 0; i < props.length; i++)
product *= result[props[i]];

关于javascript - "with"语句的效率如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20383908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com