我的代码是这样的:
function x(a,b)
{
return a + b;
}
var f = x;
function x(a,b)
{
return a - b;
}
var res = f(2,1);
我希望结果是 3,因为 f 在修改它之前指向函数 x,但事实并非如此,我如何保留对即将被重新定义的函数的引用?
最佳答案
函数声明在表达式之前处理。因此,从解释器的 Angular 来看,您的代码被解释为:
function x(a,b)
{
return a + b;
}
function x(a,b)
{
return a - b;
}
var f = x;
var res = f(2,1);
解决方案是使用函数表达式而不是函数声明来重新分配函数。这是因为正如我上面提到的,表达式是在声明之后处理的:
function x(a,b)
{
return a + b;
}
var f = x;
x = function (a,b) // <--------- this fixes your problem
{
return a - b;
}
var res = f(2,1);
请注意,由于声明在表达式之前处理,因此以下内容也适用:
var f = x;
x = function (a,b)
{
return a - b;
}
var res = f(2,1);
function x(a,b) // this is processed first
{
return a + b;
}
关于Javascript - 在更改函数之前保留对函数的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32767497/