好吧,首先我应该问一下这是否依赖于浏览器.
我已经读过,如果找到一个无效的令牌,但代码段在该无效令牌之前有效,则在令牌之前插入分号(如果前面有换行符).
但是,由分号插入引起的错误引用的常见示例是:
return
_a+b;
Run Code Online (Sandbox Code Playgroud)
..它似乎不遵循这个规则,因为_a将是一个有效的标记.
另一方面,分解调用链按预期工作:
$('#myButton')
.click(function(){alert("Hello!")});
Run Code Online (Sandbox Code Playgroud)
有没有人对规则有更深入的描述?
为什么从本文中获取的代码片段会产生不同的结果,因为花括号的位置只有一个变化?
当开始大括号{在新行上时,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)我只是想弄清楚为什么在下面的一些行不以分号结束但其他行做的技术原因 - 它是什么关于C#在某些行中预期的分号呢?
事实上,在写这篇文章时,我注意到必须带有大括号{}的语句不需要分号,但是自己的"Console.WriteLine"中的行确实需要它.
真的试图找到这个的技术原因......
即:
namespace checkPackage **//no semicolon**
{
class Program **//no semicolon**
{
static void Main(string[] args) **//no semicolon**
{
listFilesInDirectory(@"C:\Temp\"); **//NEEDS a semicolon**
}
static void listFilesInDirectory(string workingDirectory) **//no semicolon**
{
string[] filePaths = Directory.GetFiles(workingDirectory); **//NEEDS a semicolon**
foreach (string filePath in filePaths) **//no semicolon**
{
Console.WriteLine(filePath); **//NEEDS a semicolon**
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有我的bootstrap文件,它定义了require.js路径,并加载了app和config模块.
// Filename: bootstrap
// Require.js allows us to configure shortcut alias
// There usage will become more apparent futher along in the tutorial.
require.config({
paths: {
bfwd: 'com/bfwd',
plugins: 'jquery/plugins',
ui: 'jquery/ui',
jquery: 'jquery/jquery.min',
'jquery-ui': 'jquery/jquery-ui.min',
backbone: 'core/backbone.min',
underscore: 'core/underscore.min'
}
});
console.log('loading bootstrap');
require([
// Load our app module and pass it to our definition function
'app',
'config'
], function(App){
// The "app" dependency is passed in as "App"
// Again, the other dependencies passed in are not …Run Code Online (Sandbox Code Playgroud) 我遇到了一个我遇到的问题:
return
isSomething() &&
isSomethingElse();
Run Code Online (Sandbox Code Playgroud)
这是行不通的,因为javascript在返回后插入分号,使得上面的等价于:
return;
isSomething() && isSomethingElse();
Run Code Online (Sandbox Code Playgroud)
这完全让我感到困惑,为什么会这样做.我发现了一些关于该主题的StackOverflow问题(例如this,this和this),但他们只是解释了"何时"这样做,参考规范.
我甚至无法想象我想要一个return;声明后跟一些其他有效的javascript语句的情况(除非你使用goto或者我可能没有听说过其他一些模糊的javascript).在我看来,这只会导致问题.
我想知道为什么会这样做.为什么这部分规范?
编辑:关于重复的结束.我想,我明确表示,我读其他的问题和答案,指出它是JavaScript的规范的一部分,甚至把区别于其他人在我的问题的一部分大胆.在密切原因中链接的问题不包含对这个问题的答案,并且与我在回答我的问题时所链接的其他三个问题的形式完全相同.
我在java脚本中有两个相同返回类型的函数但返回类型不同.下面使用snipped id的代码
function foo1()
{
return {
bar: "hello"
};
}
function foo2()
{
return
{
bar: "hello"
};
}
Run Code Online (Sandbox Code Playgroud)
调用函数..
console.log("foo1 returns:");
console.log(foo1());
console.log("foo2 returns:");
console.log(foo2());
Run Code Online (Sandbox Code Playgroud)
输出结果....
foo1 returns:
Object {bar: "hello"}
foo2 returns:
undefined
Run Code Online (Sandbox Code Playgroud) 我有这些功能:
function A1()
{
return B() && C();
}
function A2()
{
return
B() &&
C();
}
function B()
{
return true;
}
function C()
{
return true;
}
Run Code Online (Sandbox Code Playgroud)
调用A1返回true,但A2返回undefined.A1和A2之间的唯一区别是空白区域.到底是怎么回事?在我的实际代码中,我不想将我的A1函数编写为单行,因为它会很长并且不易读.
我在网上看到了这个技巧问题,没有任何答案或描述.不确定这里发生了什么:
function identity() {
var name = 'Jack';
alert(name);
return
name
};
var who = identity();
alert(who)
Run Code Online (Sandbox Code Playgroud)
这个剪切输出,杰克然后未定义,为什么?
javascript ×7
syntax ×2
automatic-semicolon-insertion ×1
c# ×1
console ×1
console.log ×1
requirejs ×1