Javascript/Typescript -> Access 函数的先前作用域

Javascript/Typescript -> Access Previous scope of a function

本文关键字:函数 作用域 Access Typescript Javascript      更新时间:2023-09-26

是否可以在Javascript中访问函数的先前作用域?或者是否可以在调用函数时自动将"this"分配给打字稿中的参数?(所以我有以前的范围)

例如:(在我的类可查询中定义的函数)

    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"的值

Mabey 多一点代码帮助:

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

在"位置"中,我需要访问变量,这些变量在他的参数中的函数中使用

我认为除了

其全局范围的情况外,无法访问"以前的"范围(在此处查看更多内容)。即使它可能并且您可以获得对"this"的引用,它也不允许您访问变量。

我建议重新设计您的方法并使用变量 - 具有旨在保存所有必需信息的属性的类的对象。然后,您将能够传递此类父对象的实例以及函数调用,并根据需要访问其属性。

大致是这样的:

class Queryable<T> 
{
    public Where(parent: any, filter: (part: T) => boolean): IQueryable<T> 
    {
        var jj = parent.jj;
        var ast = acorn.parse("(" + filter.toString() + ")");
        return null;
    }
}
class Test 
{
    public jj;
    public Run()
    {
        this.jj = "bb";
        let aa = new Queryable<ITest>();
        aa.Where(this, x => x.content == "aa" && x.bb.content == this.jj || x.form.Contains("Hallo"));
    }
}