gpt4 book ai didi

javascript - 为什么需要 if(0) 和 if(1)

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:27:12 25 4
gpt4 key购买 nike

查看这篇文章,了解 ArcGIS 3.0 for javascript 中的代码。 https://serverapi.arcgisonline.com/jsapi/arcgis/?v=3.0

里面有“if(0)”和“if(1)”,为什么需要这个?难道 if(0) 不总是假的,而 if(1) 不总是真的吗?

最佳答案

Dojo 构建工具就是这样做的(在给定的构建选项下),但不是为了混淆。如果您查看未构建的 dojo.js 和相应的已构建的 dojo.js.uncompressed.js 文件,您可以看到构建工具正在用硬接线的 true/false 测试替换 has("somefeature") 调用。正如所注意到的,这可以并且确实会创建无法访问的代码。为什么要这样做?因为智能优化编译器(例如 Google Closure)可以删除所有无用代码,从而生成更小的文件(有时小得多……这就是重点)。

从概念上讲,它是这样的:

  1. 非构建代码具有动态评估的 has() 调用的“厨房水槽”。
  2. 您可以使用指示您在自定义构建中做什么/不想要什么的选项来配置构建配置文件。
  3. 构建过程用硬连线真/假测试(或更好的查看方式是输入/输出测试)替代动态 has() 调用 [用于相应的构建选项]。
  4. Closure 编译器在缩小过程中删除了“out”代码。

查看当前的“Dojo 构建系统”文档和 http://jamesthom.as/blog/2012/08/03/finding-nano/获取更多信息。另外,here's a good low/code-level description这个过程。

附言“if(0)/if(1)”并不是真正的混淆……恰恰相反。如果有人想混淆,他们更有可能将“if(a)...if(b)...if(c)...”与 vars 设置得很远。然而,压缩器产生的混淆代码比它们自己产生的代码更多。在通过 Closure 运行之前和之后检查 dojo.js 源代码;最终产品与原始产品几乎没有相似之处。

关于javascript - 为什么需要 if(0) 和 if(1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11354995/

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