Javascript对象中的匿名函数标签触发器

javascript object in anonymous function tag trigger

本文关键字:函数 标签 触发器 对象 Javascript      更新时间:2023-09-26

我在一个匿名函数中创建了一个标签触发函数,它是:

(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;
})();

但这是一个高级间接,您可能希望避免将您的函数包含在另一个嵌套函数中