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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

js 的匿名函数

發布時間:2023/12/18 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js 的匿名函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
var sum = function(x,y){alert(x+y); };

像上面這種,function后面沒有函數名的函數就叫做匿名函數。以上是將匿名函數賦值給了sum變量。

還有一種寫法:

alert((function(x,y){return x+y; })(2,3));
//結果為5

?當單獨運行一個匿名函數時會報錯,比如:

function() {console.log(123) }

?

塊級作用域:

在匿名函數中的變量屬于塊級作用域,

(function(){var la="你好哦";})(); console.log(la);//報錯---la is not defined

?匿名函數的作用:

1、通過匿名函數可以實現閉包。閉包是可以訪問在函數作用域內定義的變量的函數。若要創建一個閉包,往往都需要用到匿名函數。
2、模擬塊級作用域,減少全局變量。執行完匿名函數,存儲在內存中相對應的變量會被銷毀,從而節省內存。再者,在大型多人開發的項目中,使用塊級作用域,會大大降低命名沖突的問題,從而避免產生災難性的后果。自此開發者再也不必擔心搞亂全局作用域了。
https://blog.csdn.net/conatic/article/details/61627183

?閉包:

我們有時候需要得到函數內的局部變量。但是正常情況下,這是辦不到的,只有通過在函數的內部,再定義一個函數,這就形成了閉包。

function f1(){//f1不可以訪問f2內部的局部變量var n=999;function f2(){//f2可以訪問f1內的局部變量alert(n); // 999   }}

  函數f2就被包括在函數f1內部,這時f1內部的所有局部變量,對f2都是可見的。但是反過來就不行,f2內部的局部變量,對f1就是不可見的。這就是Javascript語言特有的"鏈式作用域"結構(chain scope),子對象會一級一級地向上尋找所有父對象的變量。所以,父對象的所有變量,對子對象都是可見的,反之則不成立。

?

既然f2可以讀取f1中的局部變量,那么只要把f2作為返回值,我們不就可以在f1外部讀取它的內部變量了嗎

function f1(){var n=999;function f2(){alert(n); }return f2;}var result=f1();result(); // 999

?

?

使用閉包需要注意的問題:

由于閉包會使得函數中的變量都被保存在內存中,內存消耗很大,所以不能濫用閉包,否則會造成網頁的性能問題,在IE中可能導致內存泄露。解決方法是,在退出函數之前,將不使用的局部變量全部刪除。

閉包會在父函數外部,改變父函數內部變量的值。所以,如果你把父函數當作對象(object)使用,把閉包當作它的公用方法(Public Method),把內部變量當作它的私有屬性(private value),這時一定要小心,不要隨便改變父函數內部變量的值。

?

http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html

?

轉載于:https://www.cnblogs.com/150536FBB/p/11428798.html

總結

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

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