可能重复:
Javascript 数学错误:不精确的浮点数
我有以下代码来制作动画(doIt 制作动画但不相关)。
function recur(max, i){
console.log("i: " + i);
if ( i <= 1){
setTimeout(function(){
// doIt(max,i);
recur(max, i + 0.1);
},100);
} else {
// OK
}
}
recur(16,0);
Run Code Online (Sandbox Code Playgroud)
但是,i 值不一致。对于以下代码,输出为(Google Chrome 20):
i: 0
i: 0.1
i: 0.2
i: 0.30000000000000004
i: 0.4
i: 0.5
i: 0.6
i: 0.7
i: 0.7999999999999999
i: 0.8999999999999999
i: 0.9999999999999999
i: 1.0999999999999999
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我想要 0.3 不是一个如此接近的数字。不幸的是,这在每次迭代中都会发生。
这是一些示例代码的链接。
在开始测试之前,我假设a的返回值setTimeout()
将是某种浏览器对象。
实际上,这似乎是一个简单的整数。我还相信,将的返回值分配给setTimeout
全局变量将意味着只能有一个这样的对象。但是,如您所见,如果您多次单击“启动计时器”按钮,则可以同时运行多个计时器。
例如
timeout 1
,由于五秒钟内起火timeout 2
timeout 1
要在四秒钟和timeout 2
五秒钟之内开火timeout 2
清除可以通过始终在设置之前清除当前超时变量来解决用户单击创建多个计时器的问题。但是我真的很想了解Javascript在这里实际上在做什么。
我是jquery mobile的新手,同时发出ajax请求我用来显示加载消息,直到从服务器获得响应.我为此尝试了很多但没有用.任何人都可以提前帮助我解决这个问题.
吼叫ajax电话代码
$.ajax({
url: "url",
type: "GET",
contentType: "application/json; charset=utf-8",
beforeSend: function(){
setTimeout(function(){
$.mobile.loading('show');},1);
},
success: function(msg) {
// $.mobile.loading('hide');
$.each(msg.empWall, function() {
alert(this.name);
});
},
error: function(err) {
alert(err.toString());
},
complete: function(){
setTimeout(function(){
$.mobile.loading('hide');
},1);
});
Run Code Online (Sandbox Code Playgroud) 有什么区别:
k = setInterval(function(){loop();},100);
Run Code Online (Sandbox Code Playgroud)
和
k = setInterval(loop(),100);
Run Code Online (Sandbox Code Playgroud)
为什么第二个运行一次,比如setTimeout()函数和第一个每1/10秒运行一次?
我希望我的应用程序在标签中显示某些内容几秒钟,然后进行更改。但我不希望我的应用程序在这段时间处于休眠状态。它必须具有功能性。
wait()
并使sleep()
我的应用程序在此期间无法工作。Java中是否有类似javascript的东西setTimeout()
,会继续执行代码并在一段时间后执行一行?
我的任务很简单,我需要两个工人运行。
var taskNum = 0;
function Task() {
var me = this;
this.name = '#' + ++taskNum;
Task.prototype.run = function () {
console.log(me.name);
setTimeout(me.run, 1000);
}
}
var t1 = new Task();
t1.run();
var t2 = new Task();
t2.run();
Run Code Online (Sandbox Code Playgroud)
输出应该是 1,2,1,2,但它是: 1 2 1 2 2 2 2 2 2
这可以通过将“Task.prototype.run”更改为“this.run”来解决。但是可以通过不删除原型来解决这个问题吗,因为我在复杂的解决方案中需要它?
如何仅在 javascript 或 jquery 中使用超时刷新或重新加载页面
我找到了这个/sf/answers/1035128041/但没有超时,当我在一个 omg 面前找不到时,什么也没发生。
在我的小型 Vue 应用程序中,我试图从另一个方法 (buttonClick) 中使用不同的参数调用相同的方法 (emptyDivision)。我为该方法的第一次调用设置了 5 秒超时,但是当我通过执行 buttonClick 触发这两个函数时,无法识别此延迟。
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.1.10/vue.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vuex/2.1.1/vuex.min.js"></script>
</head>
<body>
<div id="app">
<button v-on:click="buttonClick">Simulate Placement</button>
<h1>Random Division 1</h1>
<p>{{A.One}}</p>
<p>{{A.Two}}</p>
<h1>Random Division 2</h1>
<p>{{B.One}}</P>
<p>{{B.Two}}</p>
</div>
<script type="text/javascript">
new Vue({
'el': '#app',
'data': {
'A': {'One': "", 'Two': "" },
'B': {'One': "", 'Two': "" },
'Division1': ["Steelers", "Ravens"],
'Division2': ["Broncos", "Raiders"],
},
'methods': {
'emptyDivision': function(division){
this.A[division] = this.popTeam(division)[0];
this.B[division] = this.popTeam(division)[0];
},
'popTeam': function(division) {
if (division === "One"){
return …
Run Code Online (Sandbox Code Playgroud) 我有一个名为 delay() 的 Typescript 函数,它在异步/等待模式下调用。
play(){
(async () => {
await this.delay(90000);
this.player.play();
})();
}
delay(ms: number) {
return new Promise(resolve => setTimeout(resolve, ms));
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在完成 90 秒之前“杀死/中断”setTimeout 并在再次调用“播放”函数时再次开始计数?
此代码不起作用:
var counter = 0;
kick(print);
function kick(f) {
setTimeout(function(){
f(); // problem here;
kick();
}, 500);
}
function print(){
console.log(counter++);
}
Run Code Online (Sandbox Code Playgroud)
浏览器控制台给出以下错误:
Uncaught TypeError: f is not a function
如何f()
在所需的点正确调用?
settimeout ×10
javascript ×9
jquery ×2
cordova ×1
delay ×1
java ×1
loops ×1
prototype ×1
recursion ×1
refresh ×1
reload ×1
setinterval ×1
sleep ×1
this ×1
typescript ×1
vue.js ×1
vuejs2 ×1
wait ×1