2017-01-06 182 views
1

爲什麼我在js中的以下兩個函數中得不到相同的輸出。爲什麼foo2()在這裏返回undefined?

foo1(){ 
    return { 
     bar:"hello" 
     }; 
    } 
    foo2(){ 
     return 
     { 
     bar:"hello" 
     }; 
    } 
    console.log("foo1 returns:"); 
    console.log(foo1()); 
    console.log("foo2 returns:"); 
    console.log(foo2()); 
+1

foo2的返回值將其作爲返回值讀取;它不知道對象欄在裏面。 –

回答

1

檢查這一點,

function foo1() { 
    return { 
    bar: "hello" 
    }; 
} 
function foo2() { 
    return { 
    bar: "hello" 
    }; 
} 
console.log("foo1 returns:"); 
console.log(foo1()); 
console.log("foo2 returns:"); 
console.log(foo2()); 

工作?

如果是功能,請告訴它它是一個功能。

2

原因是JS中可選的分號。

JS把你的代碼是這樣的:

foo2() { 
    return ; 
    { 
    bar:"hello" 
    }; 
} 

在JS許多分號是可選的。有時候這是一個優勢(例如參見代碼打高爾夫球)。但在其他情況下,這會導致意想不到的錯誤。

foo1()你有一個開頭{後返回,所以解析器將首先嚐試尋找各自的關閉}。然而,在foo2()中,解析器沒有理由猜測,應該有更多的解析,所以它只是插入(可選)分號並按原樣運行代碼。下一行中的對象完全是(語法上)有效的代碼 - 沒有理由隱式地改變它的任何內容。