相关疑难解决方法(0)

JavaScript的自动分号插入(ASI)有哪些规则?

好吧,首先我应该问一下这是否依赖于浏览器.

我已经读过,如果找到一个无效的令牌,但代码段在该无效令牌之前有效,则在令牌之前插入分号(如果前面有换行符).

但是,由分号插入引起的错误引用的常见示例是:

return
  _a+b;
Run Code Online (Sandbox Code Playgroud)

..它似乎不遵循这个规则,因为_a将是一个有效的标记.

另一方面,分解调用链按预期工作:

$('#myButton')
  .click(function(){alert("Hello!")});
Run Code Online (Sandbox Code Playgroud)

有没有人对规则有更深入的描述?

javascript automatic-semicolon-insertion

400
推荐指数
5
解决办法
15万
查看次数

找到setTimeout()中剩下的时间?

我正在写一些与我不拥有的库代码交互的Javascript,并且不能(合理地)改变.它创建了Javascript超时,用于在一系列限时问题中显示下一个问题.这不是真正的代码,因为它超出了所有希望.这是图书馆正在做的事情:

....
// setup a timeout to go to the next question based on user-supplied time
var t = questionTime * 1000
test.currentTimeout = setTimeout( showNextQuestion(questions[i+1]), t );
Run Code Online (Sandbox Code Playgroud)

我想questionTime * 1000通过询问创建的计时器在屏幕上放置一个进度条setTimeout.唯一的问题是,似乎没有办法做到这一点.有没有getTimeout我失踪的功能?我能找到的关于Javascript超时的唯一信息仅与创建通过setTimeout( function, time)和删除通过有关clearTimeout( id ).

我正在寻找一个函数,它返回超时触发前剩余的时间,或者调用超时后经过的时间.我的进度条形码如下所示:

var  timeleft = getTimeout( test.currentTimeout ); // I don't know how to do this
var  $bar = $('.control .bar');
while ( timeleft > 1 ) {
    $bar.width(timeleft / test.defaultQuestionTime * 1000);
}
Run Code Online (Sandbox Code Playgroud)

tl; dr: …

javascript timeout settimeout

84
推荐指数
5
解决办法
6万
查看次数

您是否建议在JavaScript中的每个语句后使用分号?

在许多情况下,如果您将它们遗漏,JavaScript解析器将为您插入分号.我的问题是,你把它们遗弃了吗?

如果您不熟悉规则,则会在Mozilla网站上对分号插入进行描述.这是关键点:

如果第一至第n JavaScript程序形式的令牌是语法上有效,但第一至第n + 1个ST令牌是不与存在n之间的换行符令牌和第n + 1个ST令牌,则解析器尝试将所述n之间的虚拟分号令牌之后再次解析程序和第n + 1个ST令牌.

这种描述可能不完整,因为它没有解释@ Dreas的例子.任何人都有完整规则的链接,或者看看为什么这个例子得到一个分号?(我在JScript.NET中尝试过.)

此stackoverflow问题是相关的,但仅涉及特定方案.

javascript

52
推荐指数
9
解决办法
17万
查看次数