如何打印 JavaScript 函数的结果

How to print the result of a JavaScript function

我正在努力将函数的结果打印到屏幕上。

函数有效,它根据整数计算斐波那契数列。

但我不知道如何使用 innerHTML 显示它。

代码如下:

var number = document.getElementsByClassName('enter')[0].value;

var a = parseInt(number);

function fib(a) {
    if (a <= 1) return 1;
    return fib(a - 1) + fib(a - 2);

    var print = document.getElementsByClassName('sequence').innerHTML = a;
}
<form action="" class="form">
  <input type="number" min="1" max="10" placeholder="enter a number (max of 50)" class="enter">
  <input onclick="fib()" type="submit">
</form>
<p class="sequence"></p>

首先,您在 fib(Number) 函数中缺少一个右括号;那可能是一个错字。您还缺少 class 定义中 HTML 最后一行的结束引号。

错误发生在var print...行。 document.getElementsByClassName(class) return 是所有 HTML 个对象的数组,其中 class class。因此,return 值没有 属性 innerHTML,所以你应该在那里得到一个错误。

有两个简单的解决方案。

1 - 从数组中获取一个元素

document.getElementsByClassName('sequence')[0].innerHTML = a;

2 - 为 <p> 元素分配一个 ID

<p class="sequence" id="out"></p>
=================================================================================
document.getElementById("out").innerHTML = a;

你的算法的问题在于你使用递归来查找序列。这是一个非常昂贵的操作,因为它执行许多操作。使用它,很容易超过 maximum call size.

更好的选择是创建一个包含数字的数组,并通过仅取最后一个和倒数第二个数字来填充该数组。使用这种方法,您可以输入最多 1,000 的数字并几乎立即获得结果。在这里试试看。

var sequence = document.getElementById("sequence");
var btn = document.getElementById("getSequence");

function fib(a) {
    var numbers = [1,1];
    var num = +(document.getElementById("num").value);
    if (num) {
        while (numbers.length < num) {
            numbers[numbers.length] = numbers[numbers.length - 1] + numbers[numbers.length - 2];
        }
    sequence.innerHTML = numbers.join(',');
    }
    else {
        sequence.innerHTML = "Select a number first ";
    }
}

btn.addEventListener("click", function() {
    var input = +(document.getElementById("num").value);
    fib(input);
});
<input type="number" id="num" min="1" max="1000" />

<button id="getSequence">Get Sequence</button>

<p id="sequence"></p>

你的最后一行很奇怪,因为你想设置 innerHTML。试试这个:

document.getElementsByClassName('sequence').innerHTML = fib(a);

来源:http://www.w3schools.com/jsref/jsref_return.asp

是的,它不会从片段编译。

你的问题主要出在这里:

var print = document.getElementsByClassName('sequence').innerHTML = a;

两件事:

1) 您不需要设置变量来打印或更改 html class。所以不确定 "print" 是什么意思,但是 .innerHTML 是 getter 还是 setter 取决于它的使用方式。我认为您的意思是更改此变量的值以使输出流入 'sequence.';

2) "id"用于单个元素,"class"用于一组元素。我猜你对前者更感兴趣。所以:

document.getElementById('sequence').innerHTML = a; 

...如果我正确理解您的问题,应该可以实现您的要求。

print 是一个内置函数,所以你不能给它设置东西(或者至少你不应该),还有 getElementsByClassName returns 一个必须循环的数组

var p = document.getElementsByClassName('sequence');
var i;
for( i = 0 ; i < p.length ; i++ ){ p[i].innerHTML = 1234; }