在您看来,您遇到的最令人惊讶,奇怪,奇怪或真正的"WTF"语言功能是什么?
每个答案只能有一个功能.
为什么从本文中获取的代码片段会产生不同的结果,因为花括号的位置只有一个变化?
当开始大括号{在新行上时,test()返回undefined,并且警报中显示"no - it broke:undefined".
function test()
{
return
{ /* <--- curly brace on new line */
javascript: "fantastic"
};
}
var r = test();
try {
alert(r.javascript); // does this work...?
} catch (e) {
alert('no - it broke: ' + typeof r);
}Run Code Online (Sandbox Code Playgroud)
当括号与同一行时return,test()返回一个对象,并提醒"神奇".
function test()
{
return { /* <---- curly brace on same line */
javascript: "fantastic"
};
}
var r = test(); …Run Code Online (Sandbox Code Playgroud)真的需要"缺少分号"错误吗?为什么不把它当作警告呢?
当我编译这段代码
int f = 1
int h=2;
Run Code Online (Sandbox Code Playgroud)
编译器聪明地告诉我,我错过了它.但对我而言,就像 - "如果你知道它,就把它视为存在并继续前进.(后来我可以修复警告.)
int sdf = 1, df=2;
sdf=1 df =2
Run Code Online (Sandbox Code Playgroud)
即使对于这段代码,它的行为也是一样的.也就是说,即使多个语句(没有;)在同一行中,编译器也知道.
那么,为什么不删除这个要求呢?为什么不表现得像Python,Visual Basic等.
讨论摘要
缺少两个示例/实例,并且分号实际上会导致问题.
1.
return
(a+b)
Run Code Online (Sandbox Code Playgroud)
这被认为是JavaScript最糟糕的方面之一.但是,在这种情况下,分号插入是JavaScript的问题,但不适用于C++.在C++中,如果;在返回后完成插入,则会出现另一个错误.也就是说,缺少返回值.
2
int *y;
int f = 1
*y = 2;
Run Code Online (Sandbox Code Playgroud)
对于这个我猜,没有比引入语句分隔符更好的方法,即分号.
我不记得在哪里,但最近我通过了评论,其中用户告诉1TBS在JavaScript中比Allman更受欢迎,并且说Allman在JavaScript中有危险的含义.
这是一个有效的陈述吗?如果是这样,为什么?