JavaScript:在一个特定的作用域中创建一个函数
JavaScript: create a function within a specific 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();
我该怎么做?
谢谢。
如果我没理解错的话,你的要求是不可能的。
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/
相关文章:
- 当我更新另一个作用域变量时,作用域变量会自动更新
- 在另一个作用域变量中使用AngularJS作用域变量
- 如何在angularjs中访问一个指令作用域值到另一个指令
- AngularJ为多个DOM/作用域提供一个控制器
- 从另一个模块访问作用域的指令
- 我应该如何创建一个作用域到另一个模型的主干集合
- 在另一个作用域中声明变量
- 从一个作用域中删除数据,它反映在另一个作用区上
- 在函数中运行代码,就好像它在另一个作用域中运行一样
- 如何触发函数或将选定值赋给另一个作用域变量
- 添加一个作用域变量作为window的参数.打开功能
- 改变一个作用域项
- 如何确保一个作用域变量在查看angularjs之前被更新和绑定
- 在angularjs中,最佳实践是将简单的变量值传递给另一个作用域
- 如何在一个作用域中执行JS代码的不同部分
- 从另一个作用域调用函数
- 两个控制器,Angular中的一个作用域变量
- 从另一个作用域遍历作用域中的对象
- jQuery -如何在另一个作用域中调用函数
- 如何在回调函数中从另一个作用域更新变量