让你的javascript函数拥有记忆功能,降低全局变量的使用
考慮例如以下場景:假如我們須要在界面上畫一個圓,初始的時候界面是空白的。當(dāng)鼠標(biāo)移動的時候,圓須要尾隨鼠標(biāo)移動。鼠標(biāo)的當(dāng)前位置就是圓心。我們的實(shí)現(xiàn)方案是:假設(shè)界面上還沒有畫圓,那么就新創(chuàng)建一個;假設(shè)已經(jīng)存在,就直接更新其位置。這樣可以避免先銷毀。后創(chuàng)建的開銷。
var circle = null;function drawCircle(position)
{if(circle == null){circle = GUI.Create(position);//創(chuàng)建1個圓}else{circle.updatePositon(position);//更新圓的位置}
}
這段代碼沒有什么問題,除了引入了全局變量circle,而實(shí)際上circle僅僅會在drawCircle()函數(shù)中使用。也就說為了實(shí)現(xiàn)if-else的推斷,我們不得不使用全局變量。
有沒有什么方式可以讓函數(shù)擁有記憶功能,可以記住之前是否創(chuàng)建了圓。
這種話,我們就不用使用全局變量了。
var drawCircle = function(position)
{var circle = null;function innerFunc(position){if(circle == null){circle = GUI.Create(position);}else{circle.updatePositon(position);}}return innerFunc;
}();
這段代碼可以正確的實(shí)現(xiàn)須要的功能,并且不會引入沒有必要的全局變量。
var drawCircle = function(position)
{}();?
這段代碼會定義1個作用域。大括號內(nèi)部定義的變量和函數(shù),對于外部都是不可見的。并且大括號內(nèi)部的代碼會立馬運(yùn)行,代碼 之前完之后將innerFunc賦值給drawCircle函數(shù)。這種話。就行縮小變量的作用域。?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/mengfanrong/p/5222609.html
總結(jié)
以上是生活随笔為你收集整理的让你的javascript函数拥有记忆功能,降低全局变量的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 《秋槿》第十二句是什么
- 下一篇: 求一个关于伤感回忆的qq网名!
