function fn() { let arr = []; for (var i = 0; i < 5; i++) { arr[i] = function (i) { return i; }; } return arr; } let list = fn(); console.log(list); for (let i = 0; i < list.length; i++) { console.log(list[i]()); }
时间: 2023-03-31 16:03:00 浏览: 144
这是一个关于 JavaScript 函数的问题,我可以回答。这段代码的输出结果是 [ƒ, ƒ, ƒ, ƒ, ƒ],因为在 for 循环中使用了 var 声明 i,导致 i 的作用域为全局,所以在函数中返回的 i 始终是最后一次循环的结果。如果将 var 改为 let 声明 i,则每次循环都会创建一个新的 i,输出结果为 [, 1, 2, 3, 4]。
相关问题
let arr = [1, 2, 3, 4, 1, 6, 8] function fn1(arr) {var min = arr[0];var left = [];var right = [];for (var i = 1; i < arr.length; i++) {min > arr[i] ? left.push(arr[i]) : right.push(arr[i])}return fn1(left).concat(min, fn1(right))}
这段代码使用了递归的思想,将数组拆分成左右两个部分,分别对左右两个部分进行排序,然后再将它们合并起来。具体来说,它的实现步骤如下:
1. 定义一个函数 `fn1`,它接收一个数组 `arr` 作为参数。
2. 在函数内部,首先定义一个变量 `min`,它的值为数组中的第一个元素。
3. 定义两个空数组 `left` 和 `right`,用于存放将要拆分出来的左右两个部分。
4. 使用 for 循环遍历数组 `arr`,从第二个元素开始比较,将小于等于 `min` 的元素放入 `left` 数组中,大于 `min` 的元素放入 `right` 数组中。
5. 对 `left` 和 `right` 两个数组分别调用 `fn1` 函数进行递归排序,得到排好序的左右两个部分。
6. 最后使用 `concat` 方法将排好序的 `left` 数组、`min` 值、排好序的 `right` 数组依次连接起来,并返回结果。
下面是该算法的完整代码:
```
function fn1(arr) {
if (arr.length <= 1) {
return arr;
}
var min = arr[0];
var left = [];
var right = [];
for (var i = 1; i < arr.length; i++) {
min > arr[i] ? left.push(arr[i]) : right.push(arr[i]);
}
return fn1(left).concat(min, fn1(right));
}
var arr = [1, 2, 3, 4, 1, 6, 8];
var sortedArr = fn1(arr);
console.log(sortedArr); // [1, 1, 2, 3, 4, 6, 8]
```
阅读全文