两个独立工作但不能一起工作的javascript函数?
背景 我正试图为汗学院写一篇练习。他们的代码都可以在这里找到:。这是我第一次真正编写任何东西,我正在学习html和js,基本上只是通过查看示例代码 作为这个练习的一部分,我需要画一个“随机函数”,并找到它的零。我已经写了一个找零算法(反复将一个间隔减半以放大零点)。我知道牛顿方法的一些变体可能更快,但我想确保收敛。我的“随机函数”取一组点的值,并用多项式样条插值这些点。每一个都是独立工作的:我可以画出我的“随机函数”,我可以使用我的寻零算法,比如说,近似2的平方根(区间(1,2)上x^2-2的零点)。当我试图找到我的“随机函数”的零点时,我遇到了麻烦:我的浏览器进入了一个无限循环或什么的。我甚至看不出开发人员工具中有什么错误 所以我的问题基本上是:两个独立工作但不能一起工作的javascript函数?,javascript,html,Javascript,Html,背景 我正试图为汗学院写一篇练习。他们的代码都可以在这里找到:。这是我第一次真正编写任何东西,我正在学习html和js,基本上只是通过查看示例代码 作为这个练习的一部分,我需要画一个“随机函数”,并找到它的零。我已经写了一个找零算法(反复将一个间隔减半以放大零点)。我知道牛顿方法的一些变体可能更快,但我想确保收敛。我的“随机函数”取一组点的值,并用多项式样条插值这些点。每一个都是独立工作的:我可以画出我的“随机函数”,我可以使用我的寻零算法,比如说,近似2的平方根(区间(1,2)上x^2-2的零
<!DOCTYPE html>
<html data-require="math graphie graphie-helpers steveMath8">
<head>
<title>Piecewise-defined function</title>
<script src="../khan-exercise.js"></script>
</head>
<body>
<div class="exercise">
<div class="vars">
<var id = "n">randRange(2,4)</var>
<var id = "abscissas">makeXList()</var>
<var id = "ordinates">makeYList(-8,8,abscissas.length)</var>
<var id = "points">makeCoordinates(abscissas,ordinates)</var>
<var id = "f">(function(x){return niceFunction(x,points)})</var>
<!-- <var id = "f">(function(x){return x*x-n})</var>-->
<var id = zeros>locateZeros(f,abscissas)</var>
</div>
<div class="problems">
<div id="problem-type-or-description">
<p class="problem">You are going to have to answer 5</p>
<p class="question">Answer 5</p>
<div class="graphie" id="grid">
graphInit({
range: 10,
scale: 20,
tickStep: 1,
axisArrows: "<->"
});
a =style({
stroke: "red",
strokeWidth: 2
}, function() {
plot( function( x ) { return niceFunction(x,points);
}, [ -10, 10 ] );
});;
a.plot();
</div>
<p class="solution">5</p>
</div>
</div>
<div class="hints">
<!-- Any hints to show to the student. -->
</div>
</div>
</body>
分段定义函数
randRange(2,4)
makeXList()
makeYList(-8,8,横坐标长度)
制造坐标(横坐标、纵坐标)
(函数(x){返回函数(x,点)})
定位零(f,横坐标)
您必须回答5个问题
回答5
格拉菲尼特({
范围:10,
比例:20,
第一步:,
如箭头所示:
});
a=风格({
笔画:“红色”,
冲程宽度:2
},函数(){
绘图(函数(x){返回函数(x,点);
}, [ -10, 10 ] );
});;
a、 plot();
5
$.extend(KhanUtil{
//如果num>0,则取num并返回+1;如果num则返回-1。我认为这与您的while循环有关:
makeXList: function(){
array = [-10]
i=0
while(array[i]<10){
x = array[i]+3*KhanUtil.randRange(1,3)
if (x<10){array.push(x)}
i=i+1
}
array.push(10)
return array
},
makeXList:function(){
数组=[-10]
i=0
while(array[i]我修复了我的代码。问题似乎是,在这两个函数中,我都有一个类似这样的for循环
for(i=0;i=10;i++)
我把它改成了
for(var i=0;i=10;i++)
显然,我的程序将i视为一个全局变量,因此我的两个交互函数都递增相同的i。这有意义吗?在编程语言中,这似乎是一个非常糟糕的功能。我在这里遗漏了什么吗?谢谢!我将尝试修改它,看看它是否能解决问题。奇怪的是,我是如果这是个问题的话,我完全可以用图形表示函数。也许这只是根据需要生成数组的值?我实际上注释掉了整个代码块,只是手动输入了一个横坐标数组,我面临着同样的问题。所以这不是错误(或者我应该说,这只是其中一个错误!)你是对的,我刚刚检查过,当与未定义的语句进行比较时,该语句将计算为false。Michael:如果它仍然困扰着你,我已经找到了答案,并发布了一个答案。感谢所有的帮助。你确定这是一个无限循环(你看到CPU使用率最大化了吗)是的,CPU使用率最高的Safarits感谢你花时间仔细思考这个问题,所以我会在几天内接受这个答案,除非有人来详细说明这是怎么发生的以及为什么发生的,在这种情况下,我会接受那个人的答案。这似乎解释了:哦,天哪,我真不敢相信我错过了这个!JavaScript如果你不小心的话,你肯定会做一些非常糟糕的事情。不过,很高兴你发现了问题所在。好吧,同意@Micheal,它在java脚本中的结尾,人们必须始终考虑到…但是…根据我的弱知识,任何编程语言都不会这样做吗?…如果你没有在for语句中声明'i',它会ld倾向于从全局角度来看……如果找不到,将返回编译时错误,但另一方面java脚本将继续并声明它……Aukhan,在大多数编程语言中(我的经验非常有限)在另一个函数范围内定义的变量不是全局变量,除非您显式声明它们是全局变量。它们通常是函数范围的局部变量。
for(var i=0;i=10;i++)