javascript防止變數全域汙染

來源:互聯網
上載者:User

標籤:requestAnimationFra   變數汙染   類比setInterval   

前段時間封裝了一個函數,當時考慮的沒那麼多,最近回頭看這個封裝的函數時發現其實造成了全域汙染。原先的函數是這樣的:
function interval(fn, ms){    !this.fn?(this.fn = fn,this.ms = ms,this.step = 0):null    this.step++    this.step%(this.ms * 60) == 0?this.fn():null    requestAnimationFrame(interval)}interval(() => {    console.log(1)},1)console.log(fn)

上述代碼類比了setInterval方法,輸出結果為

從上述結果看便可知道window增加了fn變數,原因也很簡單,我們調用interval函數而非new時,函數中的this指向的是window,所以修改思路也很簡單,代碼如下:

function interval(fn, ms){    function temp (){        !this.fn?(this.fn = fn,this.ms = ms,this.step = 0):null        this.step++        this.step%(this.ms * 60) == 0?this.fn():null        requestAnimationFrame(temp)    }    new temp()}interval(() => {    console.log(1)},1)console.log(temp)   //報錯,未定義tempconsole.log(fn)     //報錯,未定義fn

我的解決思路就是將所有的變數限制在interval函數內。

javascript防止變數全域汙染

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.