我的代码被编译成以下代码,它可以工作,但我不知道为什么。引用递增值的变量不会作为参数包含在for循环中。
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();
}发布于 2019-12-14 03:24:36
在另一个函数(y)中声明的函数(x)可以访问x作用域中的所有变量(除非它们被另一个同名的变量屏蔽)。
y也可以是全局或模块作用域,而不是函数本身。
var i = "example";
function x() {
console.log(i);
}
x();
发布于 2019-12-14 03:24:44
这是在ES6中引入const和let的典型案例
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
https://stackoverflow.com/questions/59328627
复制相似问题