百度地图中的一段js,随机回调函数。

          (function() {
                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功能的实例变量

你可能感兴趣的:(c,function,百度,delete,callback)