讓你的javascript函數擁有記憶功能,減少全域變數的使用

來源:互聯網
上載者:User

讓你的javascript函數擁有記憶功能,減少全域變數的使用

考慮如下情境:假如我們需要在介面上畫一個圓,初始的時候介面是空白的;當滑鼠移動的時候,圓需要跟隨滑鼠移動,滑鼠的當前位置就是圓心。我們的實現方案是:如果介面上還沒有畫圓,那麼就新建立一個;如果已經存在,就直接更新其位置。這樣能夠避免先銷毀,後建立的開銷。

var circle = null;function drawCircle(position){if(circle == null){circle = GUI.Create(position);//建立1個圓}else{circle.updatePositon(position);//更新圓的位置}}


這段代碼沒有什麼問題,除了引入了全域變數circle,而實際上circle只會在drawCircle()函數中使用。也就說為了實現if-else的判斷,我們不得不使用全域變數。有沒有什麼方式能夠讓函數擁有記憶功能,能夠記住之前是否建立了圓。這樣的話,我們就不用使用全域變數了。

var drawCircle = function(position){var circle = null;function innerFunc(position){if(circle == null){circle = GUI.Create(position);}else{circle.updatePositon(position);}}return innerFunc;}();


這段代碼能夠正確的實現需要的功能,而且不會引入沒有必要的全域變數。

var drawCircle = function(position){}();

這段代碼會定義1個範圍,大括弧內部定義的變數和函數,對於外部都是不可見的。而且大括弧內部的代碼會立刻執行,代碼 之前完之後將innerFunc賦值給drawCircle函數。這樣的話,就能夠縮小變數的範圍。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.