访问全局变量的匿名函数 - 这怎么可能?

时间:2016-02-14 23:28:57

标签: javascript scope anonymous-function

当我设置setInterval这样的设置时:

var intervalTime = 200;
var i = 0;
var elements = document.getElementsByTagName('elements');
var elementsLength = elements.length;

var enterElements = setInterval(function(){

    elements[i].style.transform = 'translate(0,0)';
    i++;

    if (i > (elementsLength - 1)) {
        clearInterval(enterElements);
    }

    },intervalTime);

有效!

但我认为functions有范围?

我理解intervalTime应该正确解析,但setInterval()内的匿名函数如何访问

  • elements
  • i
  • elementsLength

我知道当我编写一个命名函数时,该函数无法访问在其自身之外声明的变量。

的匿名函数与命名函数不同吗?

1 个答案:

答案 0 :(得分:1)

  

我知道当我编写一个命名函数时,该函数无法访问在其自身之外声明的变量。

你怎么知道的?见MDN

  

但是,函数可以访问在定义范围内定义的所有变量和函数。 换句话说,全局范围中定义的函数可以访问全局范围中定义的所有变量。在另一个函数内定义的函数也可以访问其父函数中定义的所有变量以及任何其他变量。父函数有权访问。