gpt4 book ai didi

JavaScript 引用错误 : min is not defined

转载 作者:行者123 更新时间:2023-11-28 19:03:01 26 4
gpt4 key购买 nike

我正在尝试了解匿名和命名函数,我这里有这个 Javascript 代码:

travelNode = min = function(travelNode) {
console.log(travelNode);
if(travelNode.left === null)
return travelNode;
else
return min(travelNode.left);
}(travelNode.right);

当我尝试运行此 block 时,我收到一个 ReferenceError: min is not Defined。但是,当我将代码更改为:

travelNode = function min(travelNode) {
console.log(travelNode);
if(travelNode.left === null)
return travelNode;
else
return min(travelNode.left);
}(travelNode.right);

而且效果很好。

显然,第一个使用匿名函数,第二个使用命名函数。但是,为什么第二个可以工作,而第一个却不行呢?我该如何解决第一个问题?

编辑:这是整个代码块 -

delete: function(data) {
var deleteHelper = function(travelNode) {
if(travelNode === null)
return null;
if(data < travelNode.data)
travelNode.left = deleteHelper(travelNode.left);
else if(data > travelNode.data)
travelNode.right = deleteHelper(travelNode.right);
else {
if(travelNode.right === null)
return travelNode.left;
else if(travelNode.left === null)
return travelNode.right;
travelNode = min = function(travelNode) {
console.log(travelNode);
if(travelNode.left === null)
return travelNode;
else
return min(travelNode.left);
}(travelNode.right);
}
return travelNode;
};
this.root = deleteHelper(this.root);
}

最佳答案

var g = function f() { ... }范围 f在函数内部(因此在函数外部未定义);它将被分配给 g在其外部(其范围覆盖其内部)。结果,您可以调用函数 f里面,和g内部和外部。 f不会被篡改,因为它只在闭包中有值(value);而g可以重新定义,可能会破坏您的代码。

在第二个示例中,min在函数内部定义(但不在函数外部);因为您在内部使用它而不是在外部,所以一切正常。

在第一个示例中,您创建了一个匿名函数。然后你用 (travelNode.right) 调用它。该函数执行并中断(因为 min 尚未分配)。如果函数完成时没有错误,则返回值将被分配给 mintravelNode (就像 y = x = Math.sqrt(4)2 分配给 x 以及评估 y 后的 Math.sqrt )。

您可以使用括号,并使其起作用:

travelNode = (min = function(travelNode) {
console.log(travelNode);
if(travelNode.left === null)
return travelNode;
else
return min(travelNode.left);
})(travelNode.right);

在这里,您构造了一个匿名函数,并将其值赋给 min ,然后调用它;自 min已分配且在范围内,它仍然有效。

可以说,你的第二种方法是最好的,因为你只使用 min从内部;它对于调试还有一个额外的好处,因为该函数不会在堆栈跟踪中显示为匿名。

关于JavaScript 引用错误 : min is not defined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32196779/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com