【发布时间】:2016-03-12 14:32:30
【问题描述】:
是否可以在 Javascript 中访问函数的先前作用域?或者在调用函数时是否可以自动将“this”分配给打字稿中的参数? (所以我有以前的范围)
例如:(我的类 Queryable 中定义的函数)
Where(filter: (part: T) => boolean): Queryable<T> {
var ast = acorn.parse("(" + filter.toString() + ")"); ...
我从外面使用它:
var aa = new Queryable<ITest>();
var jj = "bb";
aa.Where(x => x.content == "aa" && x.bb.content == jj || x.form.Contains("Hallo"));
现在在我的 Where 函数中,我需要获取“jj”的值
也许更多代码会有所帮助:
class Queryable<T> {
Where(filter: (part: T) => boolean): IQueryable<T> {
var ast = acorn.parse("(" + filter.toString() + ")");
return null;
}
}
interface String {
Contains(par: String): boolean;
StartsWith(par: String): boolean;
EndsWith(par: String): boolean;
}
interface ITest {
content: string;
form: string;
href: string;
bb: ITest;
cc: ITest[];
}
function test() {
var aa = new Queryable<ITest>();
var jj = "bb";
aa.Where(x => x.content == "aa" && x.bb.content == jj || x.form.Contains("Hallo"));
}
test();
在“Where”中,我需要访问在他的参数中的函数中使用的变量
【问题讨论】:
-
您的问题很难理解,但变量
jj应该在第二段代码中可见。 -
如果你在“过滤器”中执行 lambda 是可见的,但我想解析它,并通过网络发送它,为此我需要 lambda 之外的闭包值
-
acorn.parse 应该实现什么?您可以使用 filter() 函数调用过滤器,它将在正确的上下文中执行。
-
不,我需要将函数传递给我服务器上的一个方法并在那里执行它!为此,我需要在函数字符串中包含外部变量的值!
-
您发送到服务器的只是给定函数的字符串表示形式。为了让它继续在服务器上执行,您需要以某种方式发送该函数的整个执行上下文(这是不可能的)并继续在服务器端执行。所以..你想要的是不可能的。 :)
标签: javascript scope typescript