2012-07-21 6 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(); 

Warum kann whereAmI() nicht auf privateSomething zugreifen? und wie platziere ich whereAmI() im selben Kontext wie addFunc()?Javascript Scope in Injected Funktion

Antwort

4

Javascript ist lexikalisch begrenzt: Ein Name bezieht sich auf Variablen, die auf dem Namen basieren und nicht auf dem Namen. privateSomething wird als lokal in whereAmI gesucht, und dann im globalen Bereich. Es ist nicht in beiden dieser Orte gefunden.

Verwandte Themen