Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中的变量引用。通过函数引用全局变量并对其进行操作_Javascript_Scope - Fatal编程技术网

Javascript中的变量引用。通过函数引用全局变量并对其进行操作

Javascript中的变量引用。通过函数引用全局变量并对其进行操作,javascript,scope,Javascript,Scope,我在读一篇关于Javascript性能的文章,这篇文章解释了为什么局部变量比全局变量更容易解析。作者说他们在文章中创建了引用,然后附上了这个示例(函数片段) 这个例子让我感到困惑,我不知道这个函数是如何创建引用的。在我看来,我认为它应该创造一个全新的对象 在我看来,我已经习惯于看到全局函数从函数内部被操纵,以至于我无法解决全局函数是如何被引用操纵的。在这个例子中,有人能告诉我细节吗 function initUI() { var doc = document,

我在读一篇关于Javascript性能的文章,这篇文章解释了为什么局部变量比全局变量更容易解析。作者说他们在文章中创建了引用,然后附上了这个示例(函数片段)

这个例子让我感到困惑,我不知道这个函数是如何创建引用的。在我看来,我认为它应该创造一个全新的对象

在我看来,我已经习惯于看到全局函数从函数内部被操纵,以至于我无法解决全局函数是如何被引用操纵的。在这个例子中,有人能告诉我细节吗

  function initUI() {
      var doc = document,
          bd = doc.body,
          links = doc.getElementsByTagName("a"),
          i = 0,
          len = links.length;
      while (i < len) {
          update(links[i++]);
      }
      doc.getElementById("go-btn").onclick = function () {
          start();
      };
      bd.className = "active";
  }
函数initUI(){
var doc=文件,
bd=doc.body,
links=doc.getElementsByTagName(“a”),
i=0,
len=links.length;
而(我
在您的示例中,
文档
是一个全局变量。从理论上讲,解析一个全局变量要比解析一个位于函数局部范围内的变量花费更高(@RobG指出,在某些浏览器中可能不是这样)。因此,如果您发现自己不得不多次引用全局变量,则可以考虑创建全局变量的本地引用。 例如,
var doc=单据


然而,这种微观优化很少有必要,可能被认为是过早的优化。学习如何优化与DOM相关的操作要有用得多。

赋值不会复制对象。它只是复制了对同一对象的引用。“我认为它应该创建一个全新的对象,而不是创建一个全新的对象”如果这是关于性能的,那么当
document.links
默认存在并且不需要调用时,
links=doc.getElementsByTagName(“a”)
就没有意义了。同样,为什么鼓励使用
…onclick=function(){start()}
而不是
…onclick=start
。它只是无缘无故地添加了一个额外的函数调用。“解析一个全局变量比解析一个存在于函数局部范围内的变量更昂贵”,理论上是这样的。但编译器是智能的,在某些浏览器中,至少已经证明全局编译器比局部编译器快,所以不是给定的。:-)@罗布很有趣。你有消息来源吗?更快看起来可疑;我本以为最多不会有处罚。我想这是IE的早期版本(可能是6?)。有一个有趣的基准,我不确定它的有效性,但在Safari中,globals并没有比local慢多少。在我看来,其他3个测试在所有浏览器中都是假的——“混合”与“缓存全局”几乎相同,“范围链成本”应该与全局相似,但差异很大。