javascript - Javascript:如何使变量“私有”仅用于当前的递归层?
问题描述
我正在尝试制作一个包含 for 循环的函数。但是,在循环中,它会调用自身,并且“下一层”会重置计数器。我知道这可以在 PHP 中使用,但我无法弄清楚如何保持该计数器“受保护”,以免被内部 for 循环重置。
我的原始代码比较复杂,所以我将示例简化为:
function test(a=5){
for(i=0; i<a; i++){
console.log(i);
test(a-1);
}
}
test();
当我运行它时,我得到“1 1 1 1”。
我期望的是“1 1 1 1 2 1 2 1 1 2 1 3 1 1 2 1 2 1 1 1 2 1 2 1 1 2 1 3 1 1 2 1 3 1 1 1 2 1 2 1 1 2 1 3 1 1 2 1 4 1 1 1 2 1 2 1 1 2 1 3 1 1 2 1"(在 PHP 中尝试了相同的功能)。
解决方案
如果你声明了一个没有outvar,let,const
的变量,这个变量就会变成一个全局变量。因此,在您的代码中,您正在创建一个全局变量,然后 arr 递归函数具有相同的i
增量。
您需要使用let
来声明i
.
function test(a=5){
for(let i=0; i<a; i++){
console.log(i);
test(a-1);
}
}
test();
推荐阅读
- vb.net - 找不到可安装的 ISAM vb.net
- content-management-system - 无法在 Sanity CMS 中进行搜索查询
- moodle - Moodle 数据库重载错误
- node.js - 在 vsts/Tfs 构建上运行 webdriver.io
- arrays - 使用 pugjs/jade 对对象数组进行排序
- java - 在 android 中使用 intent.createChooser() 创建选择器对话框的步骤
- excel - 动态(大)范围的标准偏差?[优秀]
- java - 如何从具有相同简单名称的类中找到某个方法?
- oracle - 以良好的性能在 PL/SQL 中获取相似的字符串
- amazon-web-services - 使用 AWS API Gateway 进行客户端 TLS 身份验证