回调函数是否在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();