回调函数是否在javascript中创建新的作用域 函数hello(){ var结果=[]; var str=‘我在这里’; 函数内部(){ var结果=[]; 对于(var i=0;i

回调函数是否在javascript中创建新的作用域 函数hello(){ var结果=[]; var str=‘我在这里’; 函数内部(){ var结果=[]; 对于(var i=0;i,javascript,Javascript,在第一个代码块中,internal是在hello中声明的新函数。它不会执行,因为您没有调用它。调用它时,它会在hello中创建一个新的子范围。但是,因为hello()实际上不返回任何内容,也不调用内部(),当您调用hello()时,您会得到未定义的。您可以通过更改此选项来修复此问题(您可以运行此代码段以查看返回值): 函数hello(){ var str=‘我在这里’; //申报内部 函数内部(){ var结果=[]; 对于(变量i=0;i

在第一个代码块中,
internal
是在
hello
中声明的新函数。它不会执行,因为您没有调用它。调用它时,它会在
hello
中创建一个新的子范围。但是,因为
hello()
实际上不返回任何内容,也不调用
内部()
,当您调用
hello()
时,您会得到
未定义的
。您可以通过更改此选项来修复此问题(您可以运行此代码段以查看返回值):

函数hello(){ var str=‘我在这里’; //申报内部 函数内部(){ var结果=[]; 对于(变量i=0;i<10;i++){ 结果:推(i); } 返回结果; } //现在调用internal()并返回其结果 返回内部(); }
console.log(hello());您混淆了函数声明和调用

可以通过多种方式声明函数:

 function forEach(cb) {
   for(var i =0;i<10;i++) {
    cb(i);
   }
}

function hello() {
   var result = [];
   var str = 'I am here';
   forEach(function(num) {
    console.log(str);
     result.push(num);
   }); 
   return result;
}
现在,此函数存在于当前作用域中,但除非调用,否则不会执行

您可以这样调用函数。现在您的函数将被执行

function myNewFunction() {}
函数及其作用域可以与变量进行比较。在另一个函数中定义的函数只能从父函数中访问。让我给你一个例子

函数myMegaFunction(){
console.log(“in-mega”);
函数mySmallFunction(){
控制台。登录(“小型”);
}
}

myMegaFunction();
在第一个示例中,返回值当然是一个空数组-因为您从未填充它…您从未调用名为
inner
的函数。除非调用它们,否则函数不会运行。您可以尝试
var result=inner();return result;
。你是对的,我明白了这一点,但是为什么第二种情况下,当我使用回调时,它会输出结果+控制台。在不调用回调函数的情况下记录(str)结果?@ahmedzoghayer-
forEach()
使用
cb(I)行为你调用回调函数
。您将内联匿名函数作为函数参数传递给了
forEach()
,然后当您执行该函数时,它为您调用了该函数。@AhmedZoghayer-我在回答中添加了更多关于本地和父范围的解释。
function myNewFunction() {}
myNewFunction();