如何防止JS代码被编译器解析/评估?

时间:2016-10-18 09:54:45

标签: javascript performance module

我有一个包含大量JS代码的模块。模块的创建方式如下:

(function (root, factory) {
  // root === window
  root.MyModuleName = factory();
})(this, function () {
  'use strict';
  var MyModuleName = function() {
    // A lot of code here that I don't want to be parsed or evaluated
    // until MyModuleName constructor is executed.
    //
    // For example:
    // var a = { d: 123 };
    // var b = function() { return 45; };
    // this.someMethod = function() { b() + a.d };
    // ...
  };
  return MyModuleName;
});

所有方法&属性在MyModuleName闭包内,(我认为)只有在MyModuleName()执行后才能解析它们。

用户点击某个按钮后,我创建了MyModuleName的实例并执行了一些方法:

someButton.onclick = function() {
  // I want compiler to parse and evaluate JS code only here
  var myModule = new MyModuleName();
  console.log(myModule.someMethod());
};

即使MyModuleName构造函数仅在单击后执行(),其中的代码在JS文件加载时被评估(我可以在Chrome开发工具时间轴中看到它)。

如何确保编译器仅在单击后评估代码,而不是在JS文件加载后?

1 个答案:

答案 0 :(得分:1)

你做不到。 JS引擎必须先评估代码才能创建函数,然后才能将函数分配到任何地方。