简单理解js闭包、类型引用....第一章
js 閉包函數、類型引用、this指向、對象原型鏈...這些東西讓我們對js又愛又恨!js虐我千百遍,我待js如初戀。
很多初學者一開始會覺得這些概念沒什么用,導致對這些東西產生一種抵抗力。接下來我們用幾段簡單實用的代碼來理解一下這些概念。好啦大話不多說,讓我們一起來看看干貨
js函數閉包
這是一段簡單的函數節流,看著四不四有點方,別著急讓我們一起來簡單段分析一下這以小段代碼。
首先定義來一個叫 throttle函數 它接收了3個參數。
首先第一個參數它是這段代碼中唯一一個干實事的,也就是最終我們要執行的功能,
第二個很簡單它是定時器的延遲時間
第三個節流函數指定的執行時間,也就最終運行的時候我們需要等待多久執行一次的時間
然后往下看重點來了,函數內定義了 一個 timerID和一個 startTime 兩個變量,一個是定時器id,一個是函數執行的開始時間。這個時候讓我們思考一下,如果我們需要比較代碼在執行中的時候和代碼執行開始的時間它們相差了多少秒?我們應該如何去比較?
如果函數每次都被執行一遍,那么函數執行開始的時間和函數當前執行中的時間將幾乎沒有差別。
這個時候我們的閉包起作用了,在throttle函數內部我們返回了一個函數,這個函數它引用了一個throttle函數里的變量,通過這個引用讓js垃圾回收機制發現了 這個變量被引用,并且這個引用的函數綁定在了window的resize事件中,于是在throttle函數執行完回收銷毀的時候垃圾回收機制會把被引用的變量保留下來.
這樣每次resize的時候都會比較一次剛剛開始的時間和現在相差了多少秒,兩個值相減得到結果超過了指定時間,func就再次被執行了,并且把這個執行中的時間給startTime一直循環,天荒地老~~!
好像說的有點繞!不管你懂不懂,反正我說完了 哈哈哈,開玩笑的, 這是深入理解js第一篇閉包函數,接下來我將尋找更加有趣的方式陸續編寫js 類型引用,原型鏈,this指向這些讓我們感到疑惑的東西。
順便給大家推薦一個方法
window.requestAnimationFrame 改方法比截流性能更好,詳情自行百度
總結
以上是生活随笔為你收集整理的简单理解js闭包、类型引用....第一章的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java替换特殊字符串
- 下一篇: 孔子绝粮于陈蔡子贡孔子问答节选(白话)