2012-07-21 56 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

相关问题