我有一个包含大量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文件加载后?
答案 0 :(得分:1)
你做不到。 JS引擎必须先评估代码才能创建函数,然后才能将函数分配到任何地方。