Pat*_*her 2 javascript node.js
在Eloquent JavaScript第4章中,我在本章的末尾实现了一个练习,该练习需要编写两个函数:sum和range。我的解决方案工作正常:
console.log(sum(range(1, 10)));
function range(from, to, step = 1) {
let numbers = [];
for (let i = from; i <= to; i += step) {
numbers.push(i);
}
return numbers;
}
function sum(numbers) {
sum = 0;
for (let x of numbers) {
sum += x;
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
但是,当我有两次第一行时,出现错误:
console.log(sum(range(1, 10)));
console.log(sum(range(1, 10))); // additional line
function range(from, to, step = 1) {
let numbers = [];
for (let i = from; i <= to; i += step) {
numbers.push(i);
}
return numbers;
}
function sum(numbers) {
sum = 0;
for (let x of numbers) {
sum += x;
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
使用调用时出现错误消息node sum-of-range.js:
/home/paedu/github.com/patrickbucher/eloquent-javascript/exercises/ch04/sum-of-range.js:2
console.log(sum(range(1, 10)));
^
TypeError: sum is not a function
at Object.<anonymous> (/home/paedu/github.com/patrickbucher/eloquent-javascript/exercises/ch04/sum-of-range.js:2:13)
at Module._compile (internal/modules/cjs/loader.js:936:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:947:10)
at Module.load (internal/modules/cjs/loader.js:790:32)
at Function.Module._load (internal/modules/cjs/loader.js:703:12)
at Function.Module.runMain (internal/modules/cjs/loader.js:999:10)
at internal/main/run_main_module.js:17:11
Run Code Online (Sandbox Code Playgroud)
您的问题是:
function sum(numbers) {
sum = 0; // ***
for (let x of numbers) {
sum += x;
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
在这里,您要重新分配sum并将其设置为等于变量0。因此,下次您sum()作为函数调用时,它是数字0,因此会给您错误:
TypeError:sum不是函数
要解决此问题,您可以使用关键字将变量声明sum为函数 的局部变量:sumlet
function sum(numbers) {
let sum = 0; // ***
...
}
Run Code Online (Sandbox Code Playgroud)
function sum(numbers) {
sum = 0; // ***
for (let x of numbers) {
sum += x;
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)