好吧,首先我应该问一下这是否依赖于浏览器.
我已经读过,如果找到一个无效的令牌,但代码段在该无效令牌之前有效,则在令牌之前插入分号(如果前面有换行符).
但是,由分号插入引起的错误引用的常见示例是:
return
_a+b;
Run Code Online (Sandbox Code Playgroud)
..它似乎不遵循这个规则,因为_a将是一个有效的标记.
另一方面,分解调用链按预期工作:
$('#myButton')
.click(function(){alert("Hello!")});
Run Code Online (Sandbox Code Playgroud)
有没有人对规则有更深入的描述?
下面的代码片段有什么区别?
var a = 0;
function b(){
a = 10;
return function a(){};
}
b();
console.log(a); // => 10
Run Code Online (Sandbox Code Playgroud)
和
var a = 0;
function b(){
a = 10;
return
function a(){};
}
b();
console.log(a); // => 0
Run Code Online (Sandbox Code Playgroud)
它与JavaScript提升有关,但我对这个概念的理解恰恰相反.
这是jsfiddle
完整代码:
function foo1(){
return {msg: "hello1"};
}
function foo2(){
return
{msg: "hello2"};
}
// output = "foo1 = {"msg":"hello1"}"
console.log('foo1 = ' , JSON.stringify(foo1()));
//output = " foo2 = undefined "
console.log('foo2 = ' , JSON.stringify(foo2()));
Run Code Online (Sandbox Code Playgroud)
两者之间的区别在于,在foo2中,{msg: 'hello'}它位于自己的新行中.我期待解析器忽略空格?
如果我在以下代码片段中执行测试函数:
function pointInside( r, p ) {
var result =
( p.x >= r.location.x - r.size.width * 0.5 ) &&
( p.x <= r.location.x + r.size.width * 0.5 ) &&
( p.y >= r.location.y - r.size.height * 0.5 ) &&
( p.y <= r.location.y + r.size.height * 0.5 )
;
return result;
}
function test() {
var rect = {};
rect["location"] = { x:6, y:5 };
rect["size"] = { width:10, height:8 };
var p = { x:10, y:8 };
var …Run Code Online (Sandbox Code Playgroud) 我正在跟随PluralSight课程并练习在Angular2中编写基本服务.我有以下服务文件:
customer.service.ts
import { Injectable } from '@angular/core';
@Injectable()
export class CustomerService {
constructor() {}
getCustomers() {
return
[
{id: 1, name: 'Ward'},
{id: 2, name: 'Joe'},
{id: 3, name: 'Bill'},
{id: 4, name: 'Bob'},
{id: 5, name: 'Levi'},
{id: 6, name: 'Brian'},
{id: 7, name: 'Susie'}
];
}
}
Run Code Online (Sandbox Code Playgroud)
当我启动lite-server使用时,npm start我收到以下错误:
angular-quickstart@1.0.0 start C:\Dev\my-proj
tsc && concurrently "tsc -w" "lite-server"
app/customer/customer.service.ts(10,3): error TS7027: Unreachable code detected.
Run Code Online (Sandbox Code Playgroud)
当我注释掉返回块时,lite-server启动正常,所以它似乎是返回它不喜欢的东西.任何帮助,将不胜感激.
我遇到了一个我遇到的问题:
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的规范的一部分,甚至把区别于其他人在我的问题的一部分大胆.在密切原因中链接的问题不包含对这个问题的答案,并且与我在回答我的问题时所链接的其他三个问题的形式完全相同.
我亲眼目睹了JavaScript中的这种行为,但我不知道如何搜索它的原因,所以我有以下问题.
据我所知,多行语句在JavaScript中工作,例如:
var text = "abc" +
"xyz";
Run Code Online (Sandbox Code Playgroud)
但是当它是这样的时候:
// returns undefined
return
"some text";
Run Code Online (Sandbox Code Playgroud)
野应!它回来了undefined.
这是一个应该返回字符串的基本语句.但是这个版本不能像我期望的那样工作.
那么我们在这里遇到了什么?我只是好奇.
我仍在尝试掌握函数定义:我说这返回一种未定义的类型是否正确?
function foo() {
return
{
car: 'Audi'
};
}
Run Code Online (Sandbox Code Playgroud) javascript是否有奇怪的行为从三元语句返回一个值?这是我为应用程序编写的函数,它从三元语句返回一个值:
function getFlowAmount(fromRegionName, toRegionName)
{
return
_reportPeriodId === 1 ?
mapData[toRegionName + 'Region']['NetFlow' + fromRegionName ] :
mapData[toRegionName + 'Region']['NetFlowChange' + fromRegionName];
}
Run Code Online (Sandbox Code Playgroud)
上面的函数返回undefined,即使dev工具监视器显示应该返回一个值,所以我用更模块化和冗长的方式重写了函数,如下所示:
function getFlowAmount(fromRegionName, toRegionName)
{
var flowAmount = 0;
if(_reportPeriodId === 1) flowAmount = mapData[toRegionName + 'Region']['NetFlow' + fromRegionName ];
else flowAmount = mapData[toRegionName + 'Region']['NetFlowChange' + fromRegionName];
return flowAmount;
}
Run Code Online (Sandbox Code Playgroud)
当我重写了如上所示的javascript函数时,函数开始返回预期值.那么javascript是否有奇怪的行为从三元语句返回一个函数值?或者我在上面的原始函数中是否出现了某种类型的语法或逻辑错误?
我目前正在通过codecademy JavaScript课程学习,并且在“对象”部分中发现了此错误。本节介绍工厂功能,工厂功能有两个参数。调用时,工厂函数返回一个对象。在return语句之后,当我按Enter键并在新行上启动花括号时,程序给出了错误,但是当我将开头的花括号移回与return关键字所在的行时,错误消失了。我不知道为什么会这样。任何人都可以请对此代码进行一些说明。
给出语法错误的代码
const robotFactory = (model, mobi) =>
{
return
{
model: model,
mobi: mobi,
beep()
{
console.log('Beep Boop');
}
}
};
const one = robotFactory('P-500', true);
console.log(one.model);
Run Code Online (Sandbox Code Playgroud)
起作用的代码
const robotFactory = (model, mobi) =>
{
return {
model: model,
mobi: mobi,
beep()
{
console.log('Beep Boop');
}
}
};
const one = robotFactory('P-500', true);
console.log(one.model);
Run Code Online (Sandbox Code Playgroud) javascript ×9
angular ×1
automatic-semicolon-insertion ×1
boolean ×1
braces ×1
expression ×1
function ×1
node.js ×1
object ×1
syntax ×1
typescript ×1