如何打印 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);
是的,它不会从片段编译。
你的问题主要出在这里:
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; }
我正在努力将函数的结果打印到屏幕上。
函数有效,它根据整数计算斐波那契数列。
但我不知道如何使用 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);
是的,它不会从片段编译。
你的问题主要出在这里:
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; }