javascript
经典面试题(5):小心javascript自动插入分号机制
在《JavaScript語言精粹》這本書里,這個“自動插入分號”機制被劃入到了JavaScript的毒瘤里面,與之并列的前面的全局變量。?
有些時候,不合時宜地插入分號,會導致嚴重的后果。 比如一個return語句要正確返回一個值,這個值的表達式的開始部分必須和return位于同一行。
今天,我們就來聊聊這個知識點,看下面的代碼函數,它們會返回什么?
function foo1(){return {bar: "hello"}; }
function foo2(){
return{bar: "hello"}; }
出人意料的是,這兩個函數返回的內容并不相同。更確切地說是:
console.log("foo1 returns:");console.log(foo1());
console.log("foo2 returns:");
console.log(foo2());
將產生:
foo1 returns:Object {bar: "hello"}
foo2 returns:
undefined
這不僅是令人驚訝,而且特別讓人困惑的是, foo2()返回的是undefined,也沒有任何錯誤拋出。
原因是這樣的,當碰到 foo2()中包含return語句的代碼行(代碼行上沒有其他任何代碼),分號會立即自動插入到返回語句之后。請仔細留意上面兩個函數中return的不同之處,foo2函數的return是單獨一行的。
也不會拋出錯誤,因為代碼的其余部分是完全有效的,即使它沒有得到調用或做任何事情(相當于它就是是一個未使用的代碼塊,定義了等同于字符串 "hello"的屬性 bar)。
所以,在使用return語句的時候,要留意javascript的這個特點,盡可能不要將return關鍵字寫在獨立的一行,避免不必造成不必要的錯誤。
熱門文章
原創教程原創教程:
附加習題:
職場焦慮:
感到迷茫:
培訓出身:
培訓費用:
搞笑黑話:
職業自由:
職場形象:
合作推廣分割線
總結
以上是生活随笔為你收集整理的经典面试题(5):小心javascript自动插入分号机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云炬随笔20211205(3)
- 下一篇: gradle idea java ssm