我在http://ejohn.org/apps/learn/#19中约翰·雷西格(John Resig)的练习#19中对此功能有一些疑问

  • 倒数第二行的目的是什么getElements.cache = {};是否将return results存储在数组中?
  • 如果我对(1)的猜测是正确的,是否仅捕获return results,因为在该函数的“else”部分中,getElements.cache[name] = results;是?
  • 当我在本教程的控制台中使用代码时,我从“else”部分中删除了getElements.cache[name] = results行,但仍然得到了与那里相同的结果,即它告诉我有76个元素。因此,如果不需要获取结果,此行getElements.cache[name] = results的目的是什么?
  • 具有以下事实的重要性:在该函数的“else”部分中,行getElements.cache[name] = results;的顺序与该代码的if部分相反,该行表示results = getElements.cache[name]
  • 最后,cache是JavaScript中的预定义函数吗?我在文档中找不到它。

  • function getElements( name ) {
      var results;
    
      if ( getElements.cache[name] ) {
        results = getElements.cache[name];
      } else {
        results = document.getElementsByTagName(name);
        getElements.cache[name] = results;
      }
    
      return results;
    }
    getElements.cache = {};
    
    log( "Elements found: ", getElements("pre").length );
    

    最佳答案

    a)最后一行确定对象getElements上的属性“cache”是一个对象。本质上是初始化该属性。

    b)那将是缓存,将getElements视为对象,并且缓存是保留结果的哈希。

    c)是的,您仍然会得到相同的结果,因为缓存只是缓存,它无论如何都不会改变答案,只会加快处理速度。

    d)是,一个正在将结果存储到缓存中,另一个正在将结果从缓存中拉出。

    e)否,这是为“getElements”定义的自定义属性,可以定义多个具有不同名称的属性。

    09-17 08:45