日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript 自执行函数剖析

發布時間:2024/4/14 javascript 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript 自执行函数剖析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

回想一下,我們平時寫的一些具名函數(也就是區別于匿名函數的函數),如下面一個例子:?

1 function sayHello(){ 2 console.log("hello,我是林麗君"); 3 } 4 sayHello();

??

分析一下上面的調用方式,sayHello是我們的函數名,當我們想要它執行的時候,我們就在這個函數名的后面添加一對括號(),像這樣sayHello(),我們的函數就會被執行了。還不懂?沒關系,我們再來分析一個例子:?

1 var sayHello=function(){ 2 console.log("hello,我是林麗君"); 3 } 4 sayHello();//hello,我是林麗君

?

在上面的例子中,我們定義了一個匿名函數,這個匿名函數干的事就是在控制臺輸出“hello,我是林麗君”,然后把這個匿名函數賦給變量sayHello,那么我們調用的時候就是在這個變量名的后面直接加上一對括號(),這樣我們的函數就會被執行,在上面的例子中,如果我們不加后面那對括號,我們調用這個sayHello會輸出什么呢?我們來用代碼測試一下:?

1 function sayHello(){ 2 console.log("hello,我是林麗君"); 3 } 4 console.log(sayHello);

?

在控制臺我們會看到:

?

它會輸出整個函數的定義,所以我們在這個函數的后面加上一個(),其實是在調用這個函數,所以自執行函數的另外一種更明確的叫法應該是“立即調用的函數表達式”,它并不是自己能夠自動執行,而是我們使用者自己在顯式的調用它。注意在這里我們要提醒各位讀者,你可不能貪圖方便將我們的代碼寫成這樣:

1 function(){ 2 console.log("hello,我是林麗君"); 3 }();

這段代碼會導致語法錯誤,因為JavaScript將function關鍵字當做一個函數聲明的開始,而函數聲明的后面不能跟圓括號,但是函數表達式的后面可以跟圓括號,想要將我們的函數聲明轉變成函數表達式,我們只需要將我們的函數聲明加上一對圓括號,像這樣:

1 (function(){ 2 console.log("hello,我是林麗君"); 3 })();

?

如果我們的函數是需要傳參的話,像下面這樣,我們直接在后面的圓括號里面把我們的參數傳進去就可以了

1 (function sayLove(i,you){ 2 console.log(i+" love "+you); 3 })("林麗君","張俊祺"); 4 //這個時候會輸出 林麗君 love 張俊祺

??

看到這里你一定很疑惑我們為什么要這樣寫,你經常看到別人說這樣寫是為了創建作用域,或許你只是人云亦云,并不是真的理解這個話的意思,下面我們來分析它的作用:

在JavaScript里面,我們并沒有塊級作用域的概念,這個話怎么理解呢?下面來看一段代碼:

1 function countNum(num){ 2 for(var i=0;i<num;i++){ 3 } 4 //這里我們調用一下i 5 console.log(i); 6 //這個時候我們控制臺會輸出i,一開始變量i的值是0,在java和C++等語言中,變量i在循環之后會被銷毀,但是在JavaScript里面,這個i可以在函數的內部的任何地方被調用 7 }

如果你在函數里面重復聲明了這個i,JavaScript是不是提示你重復定義了這個i,在java語言中,會直接報錯,因為一個變量不能再一個函數中被重復定義多次,所以匿名函數可以用來模仿塊級作用域來避免這些問題,像這樣:

function countNum(num){(for(var i=0;i<num;i++){})(); console.log(i); //這里我們再調用一下i,這個時候會報錯 }

所以這種技術通常用在全局作用域中被用在函數的外部,從而限制向全局作用域添加過多的變量和函數,同時可以避免命名沖突

這種技術我們比較關注的的點就是我們的this對象,首先我們必須明白這一點,我們的this是基于函數的執行環境的,在全局函數中,我們的this是window對象,當函數被當做某個對象的方法調用的時候,this是指向那個對象,不過,匿名函數的執行環境具有全局性,因此其this對象通常指向window,當然根據我們編寫閉包的方式,這個分界線并不總是那么清楚。

?

轉載于:https://www.cnblogs.com/baby-lijun/p/5321443.html

總結

以上是生活随笔為你收集整理的JavaScript 自执行函数剖析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。