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?以及如何将 whereAmI() 放置在与 addFunc() 相同的上下文中?

4

2 回答 2

4

Javascript 是词法范围的:名称指的是基于名称定义位置的变量,而不是使用名称的位置。privateSomething在 中作为本地查找whereAmI,然后在全局范围内查找。在这两个地方都找不到。

于 2012-07-21T11:47:00.220 回答
2

JavaScript 有词法作用域,而不是动态作用域(除了this)。请参阅http://en.wikipedia.org/wiki/Scope_(computer_science)#Lexical_scoping_and_dynamic_scoping

于 2012-07-21T11:48:09.770 回答