我不太确定如何用文字表达我的问题,所以让我告诉你一些我的代码:
class MyClass
{
public Columns: MyCol[];
public AddColumn(Header: string, Url: string)
{
Columns.Add(new MyCol(Header, function()
{
$.ajax(Url, ...);
}));
}
}
//Somewhere in the execution
var mc = new MyClass()
mc.AddColumn("col1", "myurl1");
mc.AddColumn("col2", "mycol2");
mc.Columns[0].CallFunction();
mc.Columns[1].CallFunction();
所以我所期待的是它将首先调用“myurl1”然后调用“myurl2”。 但它的作用是两次叫“myurl2”。 Url-Parameter的范围不应该只在Method中,所以它应该可以工作吗?
问候 Neokil
答案 0 :(得分:0)
您应该在此使用Lambda Expressions(类似() => {...}
编写)而不是常规函数定义(function() {...}
)。 Lambda表达式用于将外部作用域的变量移植到内部函数的作用域中。
在你的情况下,AddColumn
的内容看起来应该是这样的(我自己没试过):
Columns.Add(new MyCol(Header, () => {
$.ajax(Url, ...);
}));