立即表達式,在javascript中非常常見, 採用立即表達式可以形成一個局部作用域, 常配合閉包實現模塊化編程等其他用途,接下來我們看看,在大多數的框架中,立即表達式都有哪些寫法,以及需要註意的點,另外再介紹下in操作符的用法 1、 通過小括弧把函數聲明變成表達式, 然後再外面加個小括弧 就可以達 ...
立即表達式,在javascript中非常常見, 採用立即表達式可以形成一個局部作用域, 常配合閉包實現模塊化編程等其他用途,接下來我們看看,在大多數的框架中,立即表達式都有哪些寫法,以及需要註意的點,另外再介紹下in操作符的用法
1、 通過小括弧把函數聲明變成表達式, 然後再外面加個小括弧 就可以達到立即調用的效果
1 (function(){ 2 console.log( 'ghostwu' ); 3 })();
2、!號 把函數聲明轉化成表達式,再調用
1 !function(){ 2 console.log( 'ghostwu' ); 3 }();
3、+號 把函數聲明轉化成表達式,再調用
1 +function(){ 2 console.log( 'ghostwu' ); 3 }();
4、-號 把函數聲明轉化成表達式,再調用
1 -function(){ 2 console.log( 'ghostwu' ); 3 }();
5、波浪符 把函數聲明轉表達式,再調用
1 ~function(){ 2 console.log( 'ghostwu' ); 3 }();
6、把調用寫在表達式裡面
1 (function(){ 2 console.log( 'ghostwu' ); 3 }());
使用立即表達式,需要註意的地方:
一、1被當做函數調用, 原因在與 沒有用分號 把語句隔斷,產生歧義
1 //報錯, 1被當做函數 1() 2 var n = 1 3 (function(){ console.log( 'ghostwu' ) })()
1 var n = 1; 2 // (function(){ console.log( 'ghostwu' ) })() 3 ;(function(){ console.log( 'ghostwu' ) })()
上例為正確的做法
二、下麵這種寫法,兩個立即表達式, 沒有用分號隔開,同樣產生歧義,報錯
1 (function(){ console.log('ghostwu1') })() 2 (function(){ console.log('ghostwu2') })()
正確的寫法:
1 ;(function(){ console.log('ghostwu1') })() 2 ;(function(){ console.log('ghostwu2') })()
小結:當使用正則表達式, 應該在他的前面加上分號, 在代碼壓縮的時候就不會出錯
in操作符: 判斷屬性是否在一個對象或者他的原型上1 function CreateObj(){ 2 // this.name = 'ghostwu'; //true 3 } 4 CreateObj.prototype.name = 'ghostwu'; //true 5 var obj = new CreateObj(); 6 console.log( 'name' in obj );
1 var myObj = { 2 age : 22 3 }; 4 console.log( 'age' in myObj ); //true 5 console.log( 'sex' in myObj ); //false