相关疑难解决方法(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万
查看次数

JavaScript提升解释

下面的代码片段有什么区别?

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提升有关,但我对这个概念的理解恰恰相反.

javascript

47
推荐指数
2
解决办法
3029
查看次数

当return语句和对象之间存在换行符时,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'}它位于自己的新行中.我期待解析器忽略空格?

javascript

33
推荐指数
1
解决办法
5706
查看次数

Javascript函数中的奇怪行为

如果我在以下代码片段中执行测试函数:

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)

javascript expression boolean

11
推荐指数
2
解决办法
264
查看次数

错误TS7027:在Angular2 TypeScript Service类中检测到无法访问的代码

我正在跟随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启动正常,所以它似乎是返回它不喜欢的东西.任何帮助,将不胜感激.

node.js typescript angular

7
推荐指数
1
解决办法
1万
查看次数

为什么JavaScript设计为在返回后跟一个新行自动插入分号?

我遇到了一个我遇到的问题:

return
    isSomething() &&
    isSomethingElse();
Run Code Online (Sandbox Code Playgroud)

这是行不通的,因为javascript在返回后插入分号,使得上面的等价于:

return;
isSomething() && isSomethingElse();
Run Code Online (Sandbox Code Playgroud)

这完全让我感到困惑,为什么会这样做.我发现了一些关于该主题的StackOverflow问题(例如this,thisthis),但他们只是解释了"何时"这样做,参考规范.

我甚至无法想象我想要一个return;声明后跟一些其他有效的javascript语句的情况(除非你使用goto或者我可能没有听说过其他一些模糊的javascript).在我看来,这只会导致问题.

我想知道为什么会这样做.为什么这部分规范?

编辑:关于重复的结束.我想,我明确表示,我读其他的问题和答案,指出它是JavaScript的规范的一部分,甚至把区别于其他人在我的问题的一部分大胆.在密切原因中链接的问题包含对这个问题的答案,并且与我在回答我的问题时所链接的其他三个问题的形式完全相同.

javascript syntax

5
推荐指数
1
解决办法
345
查看次数

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.
这是一个应该返回字符串的基本语句.但是这个版本不能像我期望的那样工作.

那么我们在这里遇到了什么?我只是好奇.

javascript

4
推荐指数
1
解决办法
50
查看次数

javascript中的函数理论 - 这会返回什么

我仍在尝试掌握函数定义:我说这返回一种未定义的类型是否正确?

function foo() {
  return
  {
    car: 'Audi'
  };
}
Run Code Online (Sandbox Code Playgroud)

javascript

2
推荐指数
1
解决办法
54
查看次数

javascript是否有奇怪的行为从三元语句返回一个函数值?

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是否有奇怪的行为从三元语句返回一个函数值?或者我在上面的原始函数中是否出现了某种类型的语法或逻辑错误?

javascript

1
推荐指数
1
解决办法
53
查看次数

在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 function object braces

1
推荐指数
1
解决办法
54
查看次数