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 に答える