Javascript中的函式宣告與函數運算式(奇技淫巧)

來源:互聯網
上載者:User

舉一個例子:
[Ctrl+A 全選 注:如需引入外部Js需重新整理才能執行]

試一下就知道這段代碼的意思就是聲明一個函數,然後立刻執行,因為Javascript中的變數範圍是基於函數的,所以這樣可以避免變數汙染,但這裡的位元運算符“~”乍一看讓人摸不到頭腦,如果去掉它再運行則會報錯:SyntaxError。

在闡述為什麼之前,讓我們先來明確Javascript中的兩個概念:函式宣告和函數運算式:

先來看看什麼樣的是函式宣告:
[Ctrl+A 全選 注:如需引入外部Js需重新整理才能執行]

再來看看什麼樣的是函數運算式:
[Ctrl+A 全選 注:如需引入外部Js需重新整理才能執行]

現在回頭看看文章開頭的問題,為什麼去掉位操作符“~”後運行會報錯,這是因為從文法解析的角度看,Javascript不允許在函式宣告的後面直接使用小括弧,而函數運算式則沒有這個限制,通過在函式宣告前面加上一個“~”操作符,就可以讓文法解析器把後面看成是函數運算式,同樣的,在函式宣告前面加上“!,+,-”等操作符也是可行的。

那我們為什麼不使用下面這種函數運算式的方式呢?


[Ctrl+A 全選 注:如需引入外部Js需重新整理才能執行]

雖然從文法解析的角度看沒有問題,但是上面的代碼存在弊端,它引入了一個變數,可能會汙染現有的運行環境,帶來潛在的問題。

使用位操作符“~”的方法多少顯得有點奇技淫巧,其實把函式宣告用小括弧套起來更易讀:


[Ctrl+A 全選 注:如需引入外部Js需重新整理才能執行]

弄明白了原理,不管遇到什麼寫法,都不會再丈二和尚摸不著頭腦了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.