五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > js/javascript函數(shù)前加分號(hào)和感嘆號(hào)是什么意思?有什么用?

js/javascript函數(shù)前加分號(hào)和感嘆號(hào)是什么意思?有什么用?

文章來源:365jz.com     點(diǎn)擊數(shù):868    更新時(shí)間:2018-10-24 10:26   參與評(píng)論

從語法上來開。Javascript中分號(hào)表示語句結(jié)束,在開頭加上??赡苁菫榱藟嚎s的時(shí)候和別的方法切割一下,表示一個(gè)新的語句開始。所以,假設(shè)在一個(gè)單獨(dú)的JS文件里。開頭的分號(hào)是沒有不論什么意義的,能夠刪掉。


嘆號(hào)是邏輯運(yùn)算符,是“非”的意思,常見這樣的寫法 if(!true){}。而將運(yùn)算符載入函數(shù)定義的前面,則是將函數(shù)看做一個(gè)總體。然后再調(diào)用這個(gè)函數(shù)。并對(duì)返回的結(jié)構(gòu)進(jìn)行邏輯運(yùn)算。


說白了,此處就是構(gòu)建了一個(gè)馬上運(yùn)行函數(shù),建議樓主知道意思就能夠。自己寫的時(shí)候,能夠使用更清晰的格式:

一般看JQuery插件里的寫法是這樣的

(function($) {         
  //...  
})(jQuery);

今天看到bootstrap的javascript組件是這樣寫的

!function( $ ){  //...
}( window.jQuery );

為什么要在前面加一個(gè) " ! " 呢?


 

我們都知道,函數(shù)的聲明方式有這兩種

function fnA(){alert('msg');}//聲明式定義函數(shù)var fnB = function(){alert('msg');}//函數(shù)賦值表達(dá)式定義函數(shù)

樓主問題中出現(xiàn)的兩個(gè)函數(shù),都是匿名函數(shù)。通常,我們調(diào)用一個(gè)方法的方式就是 FunctionName()

但是,如果我們嘗試為一個(gè)“定義函數(shù)”末尾加上(),解析器是無法理解的。

function msg(){
  alert('message');
}();//解析器是無法理解的

定義函數(shù)的調(diào)用方式應(yīng)該是 msg() ;

如果將函數(shù)體部分用()包裹起來就可以運(yùn)行并且解析器是不報(bào)錯(cuò)的,如:

(function($) {         
  //...  
})(jQuery);

那為什么將函數(shù)體部分用()包裹起來就可以了呢?

原來,使用括號(hào)包裹定義函數(shù)體,解析器將會(huì)以函數(shù)表達(dá)式的方式去調(diào)用定義函數(shù)。也就是說,任何能將函數(shù)變成一個(gè)函數(shù)表達(dá)式的作法,都可以使解析器正確的調(diào)用定義函數(shù)。而 ! 就是其中一個(gè),而 + - || 都有這樣的功能。

另外,用 ! 可能更多的是一個(gè)習(xí)慣問題,不同的運(yùn)算符,性能是不同的。


 

就是為了能省略一個(gè)字符……

// 這么寫會(huì)報(bào)錯(cuò),因?yàn)檫@是一個(gè)函數(shù)定義:function() {}()// 常見的(多了一對(duì)括號(hào)),調(diào)用匿名函數(shù):
(function() {})()// 但在前面加上一個(gè)布爾運(yùn)算符(只多了一個(gè)感嘆號(hào)),就是表達(dá)式了,將執(zhí)行后面的代碼,也就合法實(shí)現(xiàn)調(diào)用
!function() {}()

在前面加上~+-等一元操作符也可以。。其實(shí)還有好幾種符合都可以保證匿名函數(shù)聲明完就立即執(zhí)行


var hi = function(){ alert("hi") };
hi();
等于...
(function(){ alert("hi") })();
!、+和()一樣的效果可以把換成
!function(){ alert("hi") }();
!比()節(jié)省一個(gè)字符,或者說比()好看些


我們都知道分號(hào)是為了和前面的代碼隔開,js可以用換行分隔代碼,但是合并壓縮多個(gè)js文件之后,換行符一般會(huì)被刪掉,所以連在一起可能會(huì)出錯(cuò),加上分號(hào)就保險(xiǎn)了。

你看到的感嘆號(hào),一般是在壓縮過的js文件里面,因?yàn)樵谀涿瘮?shù)調(diào)用的時(shí)候,通常我們都是用:  (function(){})()  的形式,但也可以使用另一種形式:!function(){}() 前面的!號(hào)可以換成-+~等等一元操作符,從而省下了1字節(jié)。


如對(duì)本文有疑問,請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答??! 點(diǎn)擊進(jìn)入論壇

發(fā)表評(píng)論 (868人查看,0條評(píng)論)
請(qǐng)自覺遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動(dòng)的言論。
昵稱:
最新評(píng)論
------分隔線----------------------------

其它欄目

· 建站教程
· 365學(xué)習(xí)

業(yè)務(wù)咨詢

· 技術(shù)支持
· 服務(wù)時(shí)間:9:00-18:00
365建站網(wǎng)二維碼

Powered by 365建站網(wǎng) RSS地圖 HTML地圖

copyright © 2013-2024 版權(quán)所有 鄂ICP備17013400號(hào)