繁体   English   中英

意外的标记 :

[英]Unexpected token :

 <script>
    function createPerson(firstName, lastName)
    {
        return
        {
            firstName: firstName,
            lastName: lastName, //This line!!!
            getFullName: function() {
                return this.firstName + " " + this.lastName;
            },
            greet: function(person) 
            {
             alert("Hello, " + person.getFullName() + "I'm " + this.getFullName());
            }

        };
    }
    var johnDoe = createPerson("John" , "Doe");
    var janeDoe = createPerson("Jane" , "Doe");

    johnDoe.greet(janeDoe);
</script>

为什么这一行会抛出错误? “意外的标记 :”。 这是一本书的例子,我做了完全相同的事情,但这个错误出现了。 不知道出了什么问题。

你不能在return语句前断行。

 function createPerson(firstName, lastName) { return { firstName: firstName, lastName: lastName, //This line!!! getFullName: function() { return this.firstName + " " + this.lastName; }, greet: function(person) { console.log("Hello, " + person.getFullName() + "I'm " + this.getFullName()); } }; } var johnDoe = createPerson("John" , "Doe"); var janeDoe = createPerson("Jane" , "Doe"); johnDoe.greet(janeDoe); 

return后删除换行符。 作为换行符被视为; 由于JavaScript的自动分号插入

演示

 function foo() { return 'foo'; } console.log(foo()) // undefined function bar() { return 'bar'; } console.log(bar()) // bar 

您的代码片段已修复

 function createPerson(firstName, lastName) { return { firstName: firstName, lastName: lastName, getFullName: function() { return this.firstName + " " + this.lastName; }, greet: function(person) { console.log("Hello, " + person.getFullName() + "I'm " + this.getFullName()); } }; } var johnDoe = createPerson("John" , "Doe"); var janeDoe = createPerson("Jane" , "Doe"); johnDoe.greet(janeDoe); 


详细说明实际错误:

{..}被解释为一个块。 firstName:被解释为标签。 firstName, lastName: lastName被解释为需要两个表达式的逗号运算符, lastName: lastName不是有效表达式,因为:此处无效。 因此错误“意外的令牌:” - 菲利克斯克林

你有

return
{

Javascript有自动分号插入; 对于interpter,你的代码看起来像

return;
{

因为{ 在下一行,并且因为它本身存在是合法的。

{放在与return相同的行上:

return {
  // ...

它失败了,因为它相当于:

function createPerson(firstName, lastName)
{
    return;
    {
        firstName: firstName,
        lastName: lastName, //This line!!!
        getFullName: function() {
            return this.firstName + " " + this.lastName;
        },
        greet: function(person) 
        {
         alert("Hello, " + person.getFullName() + "I'm " + this.getFullName());
        }

    };
}
var johnDoe = createPerson("John" , "Doe");
var janeDoe = createPerson("Jane" , "Doe");

johnDoe.greet(janeDoe);

由于自动分叉插入。 这就是为什么更常见的风格是在同一条线上打开蕨菜。

function createPerson(firstName, lastName) {
    return {
        firstName: firstName,
        lastName: lastName, //This line!!!
        getFullName: function() {
            return this.firstName + " " + this.lastName;
        },
        greet: function(person) {
         alert("Hello, " + person.getFullName() + "I'm " + this.getFullName());
        }

    };
}
var johnDoe = createPerson("John" , "Doe");
var janeDoe = createPerson("Jane" , "Doe");

johnDoe.greet(janeDoe);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM