文档
/
VM 混淆
/

严格模式兼容性

严格模式兼容性

重要

VM 混淆需要在编译时就知道代码是否运行在严格模式下。如果您的代码依赖严格模式的行为,必须显式声明。

为什么? VM 会在执行前把您的代码编译为字节码。它需要在编译期间了解严格模式上下文,才能为严格模式特有的行为(例如 this 绑定、重复参数、arguments 对象的行为)生成正确的字节码。

strictMode 选项控制混淆器如何判断。在 strictMode: null(默认)和 strictMode: false 下,只有代码自身声明了严格模式的地方才会被视为严格模式:显式的 'use strict'; 指令、ES 模块语法或类方法。其他所有代码都按非严格模式编译。strictMode: true 会把所有输入都视为严格模式。请与最终的包实际运行的上下文保持一致。

文件级严格模式

在文件顶部添加 'use strict';,即可为所有代码启用严格模式:

JavaScript

函数级严格模式

如果只有部分函数需要严格模式,可以在这些函数内部添加 'use strict';:

JavaScript

常见问题: 如果您的打包工具或构建工具会自动添加 'use strict';(例如把 CommonJS 或普通脚本源码包裹成严格模式输出的打包工具),而您在打包之前就对源码进行了混淆,VM 就无从得知严格模式。请在源文件中添加该指令、设置 strictMode: true,或在打包之后再进行混淆。