我在一个匿名函数中创建了一个标签触发函数,它是:
(function(){
var getElement = {
getElem: function(element , elemInterval){
if(document.getElementsByTagName('div')[0].onload){
element = document.getElementsByTagName('div')[0];
clearInterval(elemInterval);
element.innerHTML = ' content changed. ';
}
}
}
var element , elemInterval;
elemInterval = setInterval(getElement.getElem(element , elemInterval) , 1000);
})();
它需要做的是每一秒钟调用一个函数,并检查第一个div是否已加载,然后将元素端口保存到"element"变量中,并更改div的内容。
这似乎不工作,这里的问题是什么?
您直接调用它并将结果值传递给setInterval
,即undefined
。
你可能想要传递一个函数给setInterval
,它反过来会调用getElem
:
elemInterval = setInterval(function() {
getElement.getElem(element , elemInterval);
}, 1000);
立即调用该函数并将undefined
(其返回值)作为setInterval
的第一个参数传递。学习闭包的工作原理。
elemInterval = setInterval(function() {
getElement.getElem(element , elemInterval);
}, 1000);
问题很可能是作用域的问题——getElem函数包含在一个var中,而var又包含在函数块中(函数块也有自己的作用域)。区间函数需要在全局作用域中可访问。
我现在不能测试这个,但是iirc,这将工作:
var something = (function(){
var getElement = {
getElem: function(element , elemInterval){
if(document.getElementsByTagName('div')[0].onload){
element = document.getElementsByTagName('div')[0];
clearInterval(elemInterval);
element.innerHTML = ' content changed. ';
}
}
}
var element , elemInterval;
elemInterval = setInterval(something.getElement.getElem(element , elemInterval) , 1000);
return getElement;
})();
但这是一个高级间接,您可能希望避免将您的函数包含在另一个嵌套函数中