JavaScript';未定义';
有点简单。你能帮我解释一下为什么这条线 “console.log(“test”,nn)})”将nn显示为未定义,而不是值3?多谢各位。下面是代码片段JavaScript';未定义';,javascript,undefined,Javascript,Undefined,有点简单。你能帮我解释一下为什么这条线 “console.log(“test”,nn)})”将nn显示为未定义,而不是值3?多谢各位。下面是代码片段 function unless(test, then) { if (!test) then(); } function repeat(times, body) { for (var i = 0; i < times; i++) body(i); } repeat(3, function(n) { var nn = unless(
function unless(test, then) {
if (!test) then();
}
function repeat(times, body) {
for (var i = 0; i < times; i++) body(i);
}
repeat(3, function(n) {
var nn = unless(n % 2, function() {
return 1 * 3
});
console.log("test", nn)
});
功能,除非(然后进行测试){
如果(!test)那么();
}
功能重复(次数,身体){
对于(var i=0;i
您试图从函数的结果中分配nn,除非当前除非()
返回未定义的,因此表达式的结果是未定义的
回调函数then()
中的返回不在nn
的范围内。要捕获结果,它将返回到的范围,除非()
没有返回语句,这意味着var nn
将由于未返回任何内容而产生未定义的结果
为了解决这个问题,当您执行算法的递归部分时,您应该在除非()
的范围内指定一个变量,然后返回:
function unless(test, then) {
var result = test;
if (!test) {
result = then();
}
return result;
}
function repeat(times, body) {
for (var i = 0; i < times; i++) body(i);
}
repeat(3, function(n) {
var nn = unless(n % 2, function() {
return 1 * 3
});
console.log("test", nn)
});
功能,除非(然后进行测试){
var结果=测试;
如果(!test){
结果=然后();
}
返回结果;
}
功能重复(次数,身体){
对于(var i=0;i
现在返回3,1,3
您的,除非()
函数不返回任何内容。因此
var nn = unless(...);
意味着nn
将只是未定义的。要使nn
具有值,您的除非()
函数必须返回一个值
在这里:
function unless(test, then) {
if (!test) then();
}
没有return
语句。回调then()
可能会返回一个值,但如果您将该值分配给某个对象,则只会使该值在中可用。如果希望exceller()
本身返回值,则需要添加一个或多个适当的return
语句
例如,只需返回then()
值即可解决部分问题,例如:
function unless(test, then) {
if (!test) return then();
}
但是,对于test
为truthy的情况,仍然需要返回值。我不确定在这种情况下您希望返回值是什么,因此我不知道该推荐什么,但一般形式可能是:
function unless(test, then) {
if (!test) {
return then();
} else {
return somethingelse; // assign some return value when `test` is truthy
}
}
除非()
不返回任何内容。@Juhana该评论应该是答案。这个问题应该关闭而不是回答。@ZakariaAcharki没有区别。@ZakariaAcharki不适合我,适合JavaScript。您可以通过测试(function(arg){console.log(arg==undefined)})(
)来论证“nothing”是未定义的
——您将“nothing”传递给函数,将其与未定义的
进行比较,并得到true
。因此,“无”等于未定义的@Siguza修改了我的答案,正如你所说的“无”是真正未定义的是一个有效的观点。尽管总是最好优雅地处理未定义的
案例,谢谢您的帮助。我很感激。这很有帮助