匿名函式function前面的! ~等符號作用
相信作為前端,很多同學應該都見過類似於:
!function() {do something...}()
~function(){do something...}()
等這樣的匿名函式寫法!
當然對於老同志來說,肯定是明白這樣寫法的作用了,但是對於新手來說可能會有一定的困擾,這裡就簡單給大家分享一下關於這種寫法的作用,以及原理!
眾所周知,在js中可以這樣建立一個匿名函式:
(function(){do something...})()
//或
(function(){do something...}())
而匿名函式後面的小括號()是為了讓匿名函式立即執行,其實就是一個函式呼叫,相信大家都懂的!
那大家有沒有想過為什麼這麼寫就會報錯了:
function(){alert(1)}()
其實很簡單,因為function前面沒有(或者! ~之類的運算子,js解析器會試圖將關鍵字function解析成函式宣告語句,而不是函式定義表示式!
作為組運算子,小括號()會將其內部的表示式當成一個整體,然後返回結果,所以定義一個匿名函式正確的格式就是用小括號將函式體括起來!
同樣的! ~ + -等運算子也有同樣的效果,這是因為匿名函式也是一種值,這些運算子會將後面的函式體當成一個整體,先對匿名函式進行求值,然後在對結果進行運算!
不過這些運算子雖然能夠達到讓匿名函式立即執行的目的,但是要小心他們是有副作用的,比如:
!function() {return 1}()//false
~function() {return 1}()//-2
-function() {return false}()//0
沒錯,他們會對函式的返回值進行運算,這樣可能會導致最終的結果和你想要的結果不一樣!當然,對於那些沒有返回值的函式來說,當然是沒有什麼影響了!
既然上面都說了可能會有副作用,那為什麼還有這麼多人用了?
其實答案很簡單,無外乎兩點:
1.讓程式碼看起來不容易懂,說白了就是裝比
2.少寫一個),偷懶唄!
當然一般這麼用的時候都是函式本身沒有返回值的情況!(還有可能會有一些特殊的需求啦),為了程式碼可讀性,本人建議還是按照正規的方式使用匿名函式,沒有特殊需求的情況下儘量不用這些運算子代替小括號!
相關文章
- php中函式前加&符號的作用分解PHP函式符號
- 塊級作用域替代“匿名立即執行函式表示式(匿名IIFE)”函式
- 正規表示式最後面的識別符號g的作用是什麼符號
- Python函式引數前的單星號(*)和雙星號(**)的作用Python函式
- 深入理解 函式、匿名函式、自執行匿名函式函式
- PHP常用符號和函式收藏PHP符號函式
- 函式(FUNCTION)函式Function
- PHP匿名函式PHP函式
- Ruby 匿名函式函式
- Golang匿名函式Golang函式
- JavaScript 匿名函式JavaScript函式
- Go 匿名函式Go函式
- JavaScript匿名函式JavaScript函式
- python函式符號sympy的用法Python函式符號
- JavaScript: window.onload = function() {} 裡面的函式不執行JavaScriptFunction函式
- JavaScript匿名函式要外面巢狀小括號原因JavaScript函式巢狀
- JavaScript function 函式JavaScriptFunction函式
- PHP 匿名函式初探PHP函式
- 匿名函式(Python)函式Python
- Python匿名函式Python函式
- 閉包函式(匿名函式)的理解函式
- Yaml中特殊符號"| > |+ |-"的作用YAML符號
- 第 8 節:函式-匿名函式、遞迴函式函式遞迴
- Python函式與lambda 表示式(匿名函式)Python函式
- oracle function函式castOracleFunction函式AST
- JS:1.3,函式(function)JS函式Function
- 兄弟連go教程(14)函式 - 匿名函式Go函式
- PHP 核心特性 - 匿名函式PHP函式
- 裝飾器,匿名函式函式
- 1.5.7 Python匿名函式Python函式
- js中的匿名函式JS函式
- Js匿名函式小指南JS函式
- JavaScript 匿名函式 閉包JavaScript函式
- Python 返回函式+匿名函式Python函式
- 初識Lambda表示式(匿名函式)函式
- Java 8 Function 函式介面JavaFunction函式
- js的函式function(一)JS函式Function
- javascript Function()建構函式JavaScriptFunction函式