首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个for循环在不传递递增变量的情况下工作?

为什么这个for循环在不传递递增变量的情况下工作?
EN

Stack Overflow用户
提问于 2019-12-14 03:21:50
回答 2查看 41关注 0票数 0

我的代码被编译成以下代码,它可以工作,但我不知道为什么。引用递增值的变量不会作为参数包含在for循环中。

代码语言:javascript
复制
var _loop2 = function _loop2() {
    var p = document.createElement('p');
    p.setAttribute('class', 'location__result');
    p.setAttribute('data-id', response.features[i].id);
    p.setAttribute('data-center', response.features[i].center);
    p.textContent = response.features[i].place_name;
    p.addEventListener('click', function () {
        endingInput.value = p.textContent;
        endingResults.style.display = "none";
        placeIconAndZoom(p, position);
    });
    endingResults.appendChild(p);
};

for (var i = 0, length = response.features.length; i < length; i++) {
    _loop2();
}
EN

回答 2

Stack Overflow用户

发布于 2019-12-14 03:24:36

在另一个函数(y)中声明的函数(x)可以访问x作用域中的所有变量(除非它们被另一个同名的变量屏蔽)。

y也可以是全局或模块作用域,而不是函数本身。

代码语言:javascript
复制
var i = "example";

function x() {
    console.log(i);
}

x();

票数 0
EN

Stack Overflow用户

发布于 2019-12-14 03:24:44

这是在ES6中引入constlet的典型案例

var有一个函数级别的作用域。这与const和let在作用域方面有所不同,其中定义在var中的变量可以在hits函数声明中的任何位置访问。

在本例中,我们在for循环(函数级作用域)中声明了var i,并且for循环调用了_loop2函数。由于_loop2是for循环函数作用域的一部分,因此您可以访问该变量。

这个答案比我能解释的要好一百万倍:What's the difference between using "let" and "var"?

您可以通过在脚本文件顶部添加: var来解决此问题,但更好的方法是避免同时使用use 'strict' (除非有特殊情况),而将其切换为let

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59328627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档