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

爲什麼不能whereAmI()訪問privateSomething?以及如何將placeAmI()放在與addFunc()相同的上下文中?Javascript Scope in Injected Function

回答

4

Javascript在詞彙範圍內:名稱是指基於名稱定義位置的變量,而不是名稱的使用位置。 privateSomething被當作whereAmI的當地人,然後在全球範圍內。在任何一個地方都找不到。

2

JavaScript具有詞彙範圍界定,而不是動態範圍界定(除this之外)。請參閱http://en.wikipedia.org/wiki/Scope_(computer_science)#Lexical_scoping_and_dynamic_scoping

+0

'this'是關鍵字而非變量。它與範圍無關。 – Esailija 2012-07-21 11:59:13

+0

哎呀。所以沒有去獲得這個變量吧? – lilturtle 2012-07-21 11:59:24

+0

'this'是對一個對象(或'undefined')的引用,並且它是動態解析的。 – 1983 2012-07-21 13:20:20

相關問題