注入函数中的 JavaScript 范围

Javascript Scope in Injected Function

本文关键字:JavaScript 范围 函数 注入      更新时间:2023-12-30
(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(( 相同的上下文中?

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

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