Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript引用错误:未定义最小值_Javascript_Function - Fatal编程技术网

Javascript引用错误:未定义最小值

Javascript引用错误:未定义最小值,javascript,function,Javascript,Function,我试着用匿名函数和命名函数来概括我的想法,我这里有一段Javascript代码: travelNode = min = function(travelNode) { console.log(travelNode); if(travelNode.left === null) return travelNode; else return min(travelNode.left); }(travelNode.right

我试着用匿名函数和命名函数来概括我的想法,我这里有一段Javascript代码:

travelNode = min = function(travelNode) {
      console.log(travelNode);
      if(travelNode.left === null) 
           return travelNode;
      else 
           return min(travelNode.left);
}(travelNode.right);
当我尝试运行此块时,我得到一个
引用错误:未定义min
。但是,当我将代码更改为:

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);
    }
delete:函数(数据){
var deleteHelper=函数(travelNode){
如果(travelNode==null)
返回null;
if(数据travelNode.data)
travelNode.right=deleteHelper(travelNode.right);
否则{
if(travelNode.right==null)
返回travelNode.left;
else if(travelNode.left==null)
返回travelNode.right;
travelNode=min=函数(travelNode){
console.log(travelNode);
if(travelNode.left==null)
返回travelNode;
其他的
返回最小值(travelNode.left);
}(travelNode.right);
}
返回travelNode;
};
this.root=deleteHelper(this.root);
}
var g=function f(){…}
将作用于函数内部的
f
(因此在函数外部未定义);它将被分配到it外部的
g
(其范围覆盖it内部)。因此,您可以在内部和外部调用函数
f
,以及
g
f
不会被篡改,因为它只在闭包中有价值;而
g
可以重新定义,这可能会破坏您的代码

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

在第一个示例中,创建了一个匿名函数。然后用
(travelNode.right)
调用它。函数执行并中断(因为尚未分配
min
)。如果函数没有错误地完成,则返回值将同时分配给
min
travelNode
(就像
y=x=Math.sqrt(4)
2
分配给
x
,并且在计算
Math.sqrt
之后也将
y

您可以使用括号,并使其正常工作:

travelNode = (min = function(travelNode) {
      console.log(travelNode);
      if(travelNode.left === null) 
           return travelNode;
      else 
           return min(travelNode.left);
})(travelNode.right);
在这里,您构造一个匿名函数,将其值赋给
min
,然后调用它;由于
min
已分配且在范围内,因此它仍然有效

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

var g=function f(){…}
将在函数内部作用域
f
(因此它在函数外部未定义);它将被分配到it外部的
g
(其范围覆盖it内部)。因此,您可以在内部和外部调用函数
f
,以及
g
f
不会被篡改,因为它只在闭包中有价值;而
g
可以重新定义,这可能会破坏您的代码

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

在第一个示例中,创建了一个匿名函数。然后用
(travelNode.right)
调用它。函数执行并中断(因为尚未分配
min
)。如果函数没有错误地完成,则返回值将同时分配给
min
travelNode
(就像
y=x=Math.sqrt(4)
2
分配给
x
,并且在计算
Math.sqrt
之后也将
y

您可以使用括号,并使其正常工作:

travelNode = (min = function(travelNode) {
      console.log(travelNode);
      if(travelNode.left === null) 
           return travelNode;
      else 
           return min(travelNode.left);
})(travelNode.right);
在这里,您构造一个匿名函数,将其值赋给
min
,然后调用它;由于
min
已分配且在范围内,因此它仍然有效

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

var g=function f(){…}
将在函数内部作用域
f
(因此它在函数外部未定义);它将被分配到it外部的
g
(其范围覆盖it内部)。因此,您可以在内部和外部调用函数
f
,以及
g
f
不会被篡改,因为它只在闭包中有价值;而
g
可以重新定义,这可能会破坏您的代码

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

在第一个示例中,创建了一个匿名函数。然后用
(travelNode.right)
调用它。函数执行并中断(因为尚未分配
min
)。如果函数没有错误地完成,则返回值将同时分配给
min
travelNode
(就像
y=x=Math.sqrt(4)
2
分配给
x
,并且在计算
Math.sqrt
之后也将
y

您可以使用括号,并使其正常工作:

travelNode = (min = function(travelNode) {
      console.log(travelNode);
      if(travelNode.left === null) 
           return travelNode;
      else 
           return min(travelNode.left);
})(travelNode.right);
在这里,您构造一个匿名函数,将其值赋给
min
,然后调用它;因为分配了
min
,并且在sco中