Javascript 我能把外部论证和内部论证一样吗?

Javascript 我能把外部论证和内部论证一样吗?,javascript,Javascript,我试图创建一个函数,返回传入数字以下3或5的所有倍数之和。我立刻意识到这和“嘶嘶嗡嗡”很相似。这是第一个代码战挑战。我已经创建了两个我已经测试过的函数,它们独立工作,但是我不知道如何在我的内部函数returnNumber中引用外部函数solution()的参数。每次我尝试运行该函数时,都会得到一个0的答案 function solution(number){ function returnNumbers(number){ let number

我试图创建一个函数,返回传入数字以下3或5的所有倍数之和。我立刻意识到这和“嘶嘶嗡嗡”很相似。这是第一个代码战挑战。我已经创建了两个我已经测试过的函数,它们独立工作,但是我不知道如何在我的内部函数returnNumber中引用外部函数solution()的参数。每次我尝试运行该函数时,都会得到一个0的答案

  function solution(number){
   
    function returnNumbers(number){
        
        let numbers=[];
            for (let i=1; i<number; i++){
            if (i % 3 == 0 && i % 5 == 0) numbers.push(i);
            else if (i % 3 == 0) numbers.push(i);
            else if (i % 5 == 0) numbers.push(i);
    } //end of for loop
    return numbers
} //end of returnNumbers
    let sum = returnNumbers().reduce(function(a, b){
        return a + b;
    }, 0);
    return sum 
} //end of solution
函数解决方案(编号){
函数返回编号(编号){
让数字=[];

对于(让i=1;i来说,您面临的主要问题是作用域-变量仍然“存在”多久。要认识到的主要问题是,外部函数中的任何内容都仍然在内部函数的作用域中,只要您不声明具有相同名称的变量(当您这样做时,外部变量被隐藏-它仍然存在,您只是无法访问它,因为当您使用该名称时,您将获得内部变量)

因此,您的第一个解决方案是正确的,只是您不需要函数的参数:

应该是

function returnNumbers(){

因为number已经在作用域中,但如果将其声明为参数,则需要传递它(但在本例中这是毫无意义的)。

调用
returnNumbers
函数时,参数无法传递。请尝试将外部函数值传递给它

let sum = returnNumbers(number).reduce(function(a, b){
    return a + b;
}, 0);

您的内部函数已经可以访问外部函数的参数(因为它位于外部函数的括号内)。因此,在您的情况下,
returnNumbers
可以使用
number
,而无需将其作为参数传递

通过将其声明为
returnNumbers
的参数,您就是
number
变量。您有两种可能的解决方案

number
传递到
returnnumber

let sum=returnNumbers(number).reduce(函数a,b){
返回a+b;
}, 0);
或删除
returnnumber
参数

函数returnNumbers(){
...
}

您没有传递
x
值,请尝试
让sum=returnNumbers(x)。reduce(函数(a,b){return a+b;},0);
感谢Dave的快速响应,这非常有效!
function returnNumbers(){
let sum = returnNumbers(number).reduce(function(a, b){
    return a + b;
}, 0);