为什么我的范围函数显示一个未定义的值后,循环应该已经关闭

Why is my range function showing an undefined value after the the loop should have closed?

本文关键字:循环 未定义 显示 函数 范围 我的 一个 为什么      更新时间:2023-09-26

我正在尝试创建一个函数,该函数将存储从0到并包括x的所有整数在数组中。

function range(x){
  for(var counter = 0; counter <= x; counter++)
  show(counter);
}
var rangeArray = [range(4)];
show(rangeArray);

这将给我0、1、2、3和4(但不是在数组中),然后,好像在嘲笑我,把undefined放在数组中。

这个undefined是从哪里来的,为什么其他值不在数组中?

这就是你想要的:

function range(x){
  var result = [];
  for(var counter = 0; counter <= x; counter++) {
    result.push(counter);
    show(counter);
  }
  return result;
}
var rangeArray = range(4);
show(rangeArray);

当你没有显式调用return时,JavaScript函数总是return undefined。除了当你用new称呼function的时候。在这种情况下,函数返回this(对已创建的对象的引用)。

function foo() {
}
foo() // returns undefined
new foo() // returns a reference to the object that was created

约定规定如果一个函数要用作构造函数,它必须大写

function Foo() {
    this.x = 5;
    // return this; // is implicit 
}

这个约定是有用的,因为如果调用function Foo而忘记使用new来量化它,将会发生非常糟糕的事情。

x = 42
Foo() // this mistake is easier to spot if the function is capitalized
// x is now equal to 5.
x = 42
f = new Foo()
// x is still 42 and f.x is 5

为什么值不进入数组?

程序不能简单地将值打印到自己的源代码中。这样做将是令人难以置信的不可能推理。本页的其他答案都是针对你的具体问题的很好的解决方案

我们有一个叫做range的基本函数,它在功能上类似于python的range函数。这是一个简单而有效的数组生成器。

// Function to return array from 0-x
function range(x) {
    // Start with an empty array
    var arr = [],
        i = -1;
    // Loop through values from 0-X
    for(;i++ < x;) {
        // Add number to array
        arr.push(i)
    }
    // Return array 
    return arr;
}
var rangeArr = range(5)  //returns [0, 1, 2, 3, 4, 5]