Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:访问另一个参数的回调_Javascript_Callback - Fatal编程技术网

JavaScript:访问另一个参数的回调

JavaScript:访问另一个参数的回调,javascript,callback,Javascript,Callback,在中,回调似乎正在访问另一个参数,而不必再次提供参数 摘自上面的链接 如图所示: 此._可枚举项传递给_getPropertyNames _enumerable接受一个名为obj的参数 不过,obj并没有显式传递,所以当回调传递给_getPropertyNames时,它似乎会以某种方式访问它的第一个参数,即obj 为了测试它,我尝试了下面的方法,但没有成功 function myFunc2(para, callback) { console.log(`Para: ${para}`);

在中,回调似乎正在访问另一个参数,而不必再次提供参数

摘自上面的链接

如图所示:

此._可枚举项传递给_getPropertyNames _enumerable接受一个名为obj的参数 不过,obj并没有显式传递,所以当回调传递给_getPropertyNames时,它似乎会以某种方式访问它的第一个参数,即obj 为了测试它,我尝试了下面的方法,但没有成功

function myFunc2(para, callback) {
    console.log(`Para: ${para}`);
    callback();
}
myFunc2(42, (para) => console.log(para));

知道我这里缺少什么吗?

我建议您理解JavaScript中的闭包和变量作用域

对于上面提到的代码段,由于回调需要arg“para”,所以可以传递它并记录它。如果您不想传递它,您可以将它添加到全局对象“窗口”对象中(如果是浏览器)

这是因为您的匿名回调函数首先在它自己的主体中需要'para'变量,然后它将尝试在它的父主体中搜索,在本例中,父主体是全局对象

对于下面的示例

函数myFunc2para,回调{ window.para=para; log`Para:${Para}`; 回调; }
myFunc242,=>console.logpara;传递para-console.logPara:${para},回调:${callbackpara};哪一个不起作用:你到底期望什么?它怎么不起作用?传递给调用的回调函数记录给定的参数,但在调用回调函数时不提供任何参数:callback;。此段与调用中定义的回调中的不同,您应该区分它们以避免混淆:myFunc242,x=>console.logx@这正是我的观点。此._可枚举项不会向下传递obj。据我所知,我会这样写。enumerableobj,prop@Kaddath是的,我知道,这就是为什么我不明白链接示例是如何工作的_enumerable访问_getPropertyNames中的obj,而obj从未传递给它。不,这里的棘手部分是此行返回此值。_getPropertyNamesobj,false,true,this。_enumerable;根本不调用此可枚举函数。它将其作为参数提供给此函数。_getPropertyNames,因此includePropCb现在是此函数。它还没有在这里被调用。如果需要的话,可以用这个名字来命名。这个._getPropertyNames已经有了obj作为参数,所以如果我们愿意,他可以将它与函数一起使用。谢谢。如果可以的话,这里还有一个一般性的后续问题:当回调函数在myFunc2中执行时,它为什么不能访问myFunc2中的变量?正如我们所知,函数可以访问外部作用域中的变量,对于回调来说,外部作用域包括外部函数和全局作用域。函数可以访问外部作用域中的变量是绝对正确的,如果函数是在其外部函数声明中声明的,而不是在调用时声明的,这是有效的。因此,在您的示例中,回调在执行时驻留在全局上下文中,而不是myFunc2中。我希望这是有意义的。啊,因为作用域是在编译时静态确定的,而不是在运行时确定的,执行只在运行时发生?我想把JavaScript称为解释语言,这是可以讨论的。我相信JavaScript遵循词法范围,因此范围取决于知道变量的物理位置。
function myFunc2(para, callback) {
    console.log(`Para: ${para}`);
    callback();
}
myFunc2(42, (para) => console.log(para));