2012-07-21 21 views
6
(function(){ 
    var privateSomething = "Boom!"; 
    var fn = function(){} 
    fn.addFunc = function(obj) { 
     alert('Yeah i can do this: '+privateSomething); 
     for(var i in obj) fn[i] = obj[i]; 
    } 
    window.fn=fn; 
})(); 

fn.addFunc({ 
    whereAmI:function() 
    { 
     alert('Nope I\'ll get an error here: '+privateSomething); 
    } 
}); 

fn.whereAmI(); 

¿Por qué no puede whereAmI() acceder a privateSomething? y ¿cómo coloco whereAmI() en el mismo contexto que addFunc()?Javascript Ámbito en función inyectada

Respuesta

4

Javascript tiene un alcance léxico: un nombre hace referencia a variables basadas en dónde se define el nombre, no dónde se usa el nombre. privateSomething se busca como local en whereAmI, y luego en el alcance global. No se encuentra en ninguno de esos lugares.

Cuestiones relacionadas