JavaScript:在一个特定的作用域中创建一个函数

JavaScript: create a function within a specific scope

本文关键字:一个 作用域 创建 函数 JavaScript      更新时间:2023-09-26

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();

我该怎么做?

谢谢。

如果我没理解错的话,你的要求是不可能的。

Javascript中的

作用域是一个词法结构,这意味着作用域中的内容是由它在源文件中相对于任何封闭函数的物理位置(在解析时)定义的。

一旦作用域(词法上)被关闭,就不能回顾性地向作用域添加内容。

函数作用域在解析时定义。您可以创建一个函数并使其作为window属性可见:

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

但是这不会改变"内部"函数的作用域。它是可见的可通过全局对象调用的,但该函数不可更改地位于该"外部"函数的作用域中。

this上下文中定义这个函数:

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

http://jsfiddle.net/Ur6vF/