JavaScript:在特定范围内创建函数

时间:2014-03-19 14:56:42

标签: javascript function scope

JavaScript:我需要在特定范围内创建一个函数。 要创建的函数是由先前的代码生成过程动态生成的。并且此功能的定义范围也可能会发生变化。

看一下这个例子:

var createFnInOtherScope = function() {
    console.debug('createFnInOtherScope: Who I am', this);

    //This code can not be modified because it's dynamically generated
    function MyFunction() {
            console.debug('MyFunction');
    }
}
var obInitial = {
    createFn: function() {
        console.debug('createFn: Who I am', this);
        createFnInOtherScope.call(window);
    }
}
obInitial.createFn();

//ReferenceError: MyFunction is not defined
window.MyFunction();

我怎么能这样做?

感谢。

3 个答案:

答案 0 :(得分:3)

如果我理解正确的话,你所要求的是不可能的。

Javascript中的范围是一个词汇构造,意味着范围内的内容是由源文件中关于任何封闭函数的物理位置(在解析时)定义的。

一旦该范围(词汇上)被关闭,您就无法追溯性地将某些内容添加到范围中。

答案 1 :(得分:0)

函数范围在分析时定义。您可以创建一个函数并将其显示为window属性:

function outer() {
  function inner() {
    console.log("hello world");
  }

  window.inner = inner;
}

window.inner(); // hello world

但这并没有改变“内在”功能的范围。它通过全局对象可见可调用,但该功能在“外部”功能的范围内是不可改变的。

答案 2 :(得分:0)

只需在this上下文中定义此功能:

var createFnInOtherScope = function() {
    this.MyFunction = function() {
        console.debug('MyFunction');
    };
};

DEMO: http://jsfiddle.net/Ur6vF/