在许多情况下,如果您将它们遗漏,JavaScript解析器将为您插入分号.我的问题是,你把它们遗弃了吗?
如果您不熟悉规则,则会在Mozilla网站上对分号插入进行描述.这是关键点:
如果第一至第n 个 JavaScript程序形式的令牌是语法上有效,但第一至第n + 1个ST令牌是不与存在n之间的换行符个令牌和第n + 1个ST令牌,则解析器尝试将所述n之间的虚拟分号令牌之后再次解析程序次和第n + 1个ST令牌.
这种描述可能不完整,因为它没有解释@ Dreas的例子.任何人都有完整规则的链接,或者看看为什么这个例子得到一个分号?(我在JScript.NET中尝试过.)
此stackoverflow问题是相关的,但仅涉及特定方案.
以下代码说明了分配的对象文字,但之后没有分号:
var literal = {
say: function(msg) { alert(msg); }
}
literal.say("hello world!");
Run Code Online (Sandbox Code Playgroud)
这似乎是合法的,并且不会发出警告(至少在Firefox 3中).这是完全合法的,还是有严格的JavaScript版本,这是不允许的?
我特别想知道未来的兼容性问题...我想写"正确的"JavaScript,所以如果技术上我需要使用分号,我想使用它.
我只编写了少量运行嵌入Java应用程序的JavaScript,但它是使用QUnit测试的,已经混合了,我还没有注意到任何问题.
是否有一些传统的智慧是否在JavaScript中使用分号?
我的问题在这里,我正在学习JavaScript,但根本不是编程新手.我理解提升,但是使用严格模式不应该产生错误,并且当6被分配给未声明的变量或文件时被捕获.getElement ...被分配x这不会产生错误所以我的诊断就是提升仍在继续...我不喜欢并想要摆脱使用严格.使用Chrome版本42.0.2311.152 m作为我的浏览器
function strictMode(){
'use strict';
try {
x = 6;
document.getElementById('hoisting').innerHTML = x;
var x;
}
catch(err) {
document.getElementById('error_report').innerHTML =
"There was an error that occured (Were in Strict Mode)" +
" " + err.message;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在阅读Bjarne Stroustrup的编程:使用C++的原理和实践
在第2章的练习部分中,它讨论了在编译hello_world程序时查看输入错误的各种方法
#include "std_lib_facilities.h"
int main() //C++ programs start by executing the function main
{
cout << "Hello, World!\n", // output "Hello, World!"
keep_window_open(); // wait for a character to be entered
return 0;
}
Run Code Online (Sandbox Code Playgroud)
特别是本节要求:
想想你在程序中输入的错误至少还有五个(例如忘记
keep_window_open(),在键入单词时保持Caps Lock键,或者输入逗号而不是分号)并尝试每个错误,看看当你尝试时会发生什么编译并运行这些版本.
对于该cout行,您可以看到有一个逗号而不是分号.
这编译并运行(对我来说).是否做出了假设(如在javascript问题中:为什么使用分号?)语句已被终止?
因为当我尝试keep_terminal_open();编译时通知我分号排除.