可能是一个简单的问题,甚至希望不会重复类似like this one的问题,但是是否有任何规则如何为任何浏览器,node.js等正确编写IIFE?
IIFE示例-第二个是我自己在IE中的实验过程中创建的,观看了所有相关的Pluralsight视频之后。
是否有任何规则,最佳实践或规范说明如何在IIFE中正确编写方法?
在第一个(非常常见)的示例中,除了构造函数外,其他所有内容都泄漏了
在第二个中,但不确定为什么或在何处找到此行为的规范。
经典函数与其匿名版本(事件处理程序等)之间也可能存在差异。
狗(https://coderwall.com/p/ta4caw/using-iife-to-create-private-members-in-javascript)
true-构造函数
错误-吸气剂
false-设置器在每个实例中都唯一
图表
true-构造函数
true-方法在所有对象中具有单个实例
var Dog = (function() {
var name = "defaut name";
var DogInner = function() {
this.getName = function() {
return name;
};
this.setName = function(value) {
name = value;
};
};
return DogInner;
})(); // this does the trick
var results = ["Dog"]
var dog = new Dog();
var dog1 = new Dog();
results.push(dog.Dog === dog1.Dog); // true
results.push(dog.setName === dog1.setName); // false
results.push(dog.setName === dog1.setName); // false
// IIFE object picked from my code
var Chart = (function() {
function Chart() {}
Chart.prototype.drawChart = function(data) {}
return Chart;
})();
results.push(' ');
results.push("Chart");
var chart1 = new Chart();
var chart2 = new Chart();
results.push(chart1.Chart === chart2.Chart); // true
results.push(chart1.drawChart === chart2.drawChart); // true
console.log(results.join('\n'));
最佳答案
如果您在IIFE中使用this.variable名称,它将创建实例公共变量,但是只能使用私有静态或公共实例变量。
关于javascript - IIFE方法泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56235273/