我的脚本可以打印三角形数字的模式(例如1,3,6,10,...),但我想将公式(n * (n + 1)) / 2
存储在名为formula
的变量中,而不是在if-else语句中多次写入。
/* Current script */
var pat = document.getElementById("pattern");
var nMax = 10; // max number of intervals
for (var n = 1; n <= nMax; ++n) {
if (n != nMax)
// insert comma and space after each interval
pat.innerHTML += (n * (n + 1)) / 2 + ", ";
else
// append ellipsis after last interval
pat.innerHTML += (n * (n + 1)) / 2 + ",…";
}
<body>
<p id="pattern"></p>
</body>
这是我尝试过的,但结果是1,1,1,1,1 ......:
我已将var n = 1
移至nMax
变量下的自己的行,以便在公式中定义n
并将for
循环的第一部分更改为{{ 1}}。然后在if-else语句中,我用n = 1
变量替换了(n * (n + 1)) / 2
的每个实例。在测试修改后的脚本之后,模式导致了所有1。
formula
/* Version with formula variable (not working properly) */
var pat = document.getElementById("pattern");
var nMax = 10; // max number of intervals
var n = 1;
var formula = (n * (n + 1)) / 2;
for (n = 1; n <= nMax; ++n) {
if (n != nMax)
// insert comma and space after each interval
pat.innerHTML += formula + ", ";
else
// append ellipsis after last interval
pat.innerHTML += formula + ",…";
}
如何将公式存储在变量中并使用它而不会产生意外结果?
答案 0 :(得分:7)
将公式放在函数中:
function formula(n) { return n * (n + 1) / 2; }
然后你可以打电话给它:
pat.innerHTML = formula(n) + ", ";
答案 1 :(得分:7)
动态评估变量,因此如果您想稍后更改参数,则需要将其存储为函数:
var formula = function(n){return (n * (n + 1)) / 2;}
//and then you can use
pat.innerHTML += formula(n)
这使得公式成为对带有数字的函数的引用,并返回您想要应用于该数字的公式。然后你可以使用公式(n)调用它,其中n是你想要将函数应用到
的数字答案 2 :(得分:2)
你可以使你的公式变量成为一个带有整数“n”的函数。
var pat = document.getElementById("pattern");
var nMax = 10; // max number of intervals
var n = 1;
function formula(n){
return (n * (n + 1)) / 2};
for (n = 1; n <= nMax; ++n) {
if (n != nMax)
// insert comma and space after each interval
pat.innerHTML += formula(n) + ", ";
else
// append ellipsis after last interval
pat.innerHTML += formula(n) + ",…";
}
<body>
<p id="pattern"></p>
</body>
答案 3 :(得分:1)
你想要创造的是一种功能,你的尝试非常接近。
创建一个函数并将其分配给您编写的变量
var formula = function( arguments ){ /* function statements */ }
在你的情况下,它将是
var formula = function(n){ return (n * (n + 1)) / 2; }
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function
或者,为了减少烦恼,可以使用ES2015(EcmaScript 6)箭头函数表达式。请记住,它是一项新功能,并不是所有浏览器都支持,但它是JavaScript在不久的将来的发展方向。
var formula = (n) => (n * (n + 1)) /2;
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions