我正在尝试增加计数器,但我想将变量移出全局命名空间并在本地声明它。我不知道该怎么做。感谢您的帮助。
这是我目前使用的代码。
var mediaClickCounter = 0;
function refreshMediaAds() {
if (mediaClickCounter < 2) {
mediaClickCounter++;
} else {
mediaClickCounter = 0;
refreshAds();
}
}
// the function creates a local scope.
var refreshMediaAds = (function() {
var mediaClickCounter = 0;
// once executed it returns your actual function.
return function _refreshMediaAds() {
if (mediaClickCounter < 2) {
mediaClickCounter++;
} else {
mediaClickCounter = 0;
refreshAds();
}
}
// you execute the function.
})();
闭合<3.
这样的东西怎么样:
var ClickCounter = {
mediaClickCounter: 0,
refreshMediaAds:function() {
if (this.mediaClickCounter < 2) {
this.mediaClickCounter++;
} else {
this.mediaClickCounter = 0;
refreshAds();
}
}
};
然后你可以只使用 ClickCounter.refreshMediaAds()
这将递增成员变量。
这是可能的,你可以创建一些对象并将函数用作其方法。这样,变量将是对象的属性,而不是全局变量。
如果您目前不使用任何框架,使用 MooTools 可能会对您有很大帮助。创建和使用对象的一些示例位于此处:http://mootools.net/docs/core/Class/Class
您可以尝试返回您拥有的内容(以便以后可以根据需要使用它)
function refreshMediaAds(mediaClickCounter) {
if (mediaClickCounter < 2) {
mediaClickCounter++;
} else {
mediaClickCounter = 0;
refreshAds();
}
return mediaClickCounter;
}
//then do:
refreshMediaAds(clicks)
function refreshMediaAds() {
var mediaClickCounter = 0; // now variable have local scope.
if (mediaClickCounter < 2) {
mediaClickCounter++;
} else {
mediaClickCounter = 0;
refreshAds();
}
}
如果你真的必须,我相信这样的事情可以解决问题。 但是,IMO 您应该将其保留在全局命名空间中。
var refreshMediaAds = function() {
var mediaClickCounter = 0;
return function()
{
if (mediaClickCounter < 2) {
mediaClickCounter++;
} else {
mediaClickCounter = 0;
refreshAds();
}
}
}();
请注意,我还没有对此进行测试,这是对解决方案的有根据的猜测。