function translate(point, type, callback) {
var callbackName = 'cbk_' + Math.round(Math.random() * 10000);
BMap.Convertor[callbackName] = function(xyResult) {
alert(callbackName);
delete BMap.Convertor[callbackName];
};
setTimeout(function() {
BMap.Convertor[callbackName].call();
}, 1000);
}
window.BMap = window.BMap || {};
BMap.Convertor = {};
BMap.Convertor.translate = translate;
})();
BMap.Convertor.translate();
BMap.Convertor.translate();
1.通过随机数,来实现回调函数回调的目标都不一样。
2.BMap.Convertor.translate()方法调用,会产生一个新的内存空间,所以callbackName在每一个内存空间指向是不同的,每个随机函数不会相互污染。
如下是a b会相互污染的
(function(){
var a = 1;
var b = 2;
var MyClass = function(x, y){
a = x || 0;
b = y || 0;
}
MyClass.prototype = {
c: "c",
d: "d",
geta: function(){
return a;
},
seta: function(i){
a = i;
},
getb: function(){
return b;
},
setb: function(i){
b = i;
}
}
window.MyClass = MyClass;
})()
调用myClass方法时,function内部的a b变量其实都是外部作用域的变量,所以指向的内存地址始终不变。不论你是用new还是单独调用,正确的方法是将a b变量放在function内部,从而实现private功能的实例变量