基本的JavaScript,此函数为什么不传递参数

上级男子

我正在尝试学习来自C#的JavaScript。我编写了这段简单的代码,但是由于某种原因,该参数未传递给setTimeout函数。

function displayName(name) {
    console.log(`Name is ${ name }`);
}

function login(name) {
    // The argument 'name' is not being passed from the login function to the setTimeout !!
    setTimeout(name =>{
        displayName(name)
    }, 2000);
}

login("Satoshi")

我期望输出是:Name is Satoshi
相反,我得到:Name is undefined

我要去哪里错了?显然我对JavaScript参数和范围不了解。

TJ人群

参数“名称”没有从登录函数传递到setTimeout!

那是因为您用箭头函数的参数遮盖login name该参数。函数参数列表中的参数名称类似于函数体内的变量声明,因此您的原始代码具有一个外部name(在中login)和一个单独的内部(在箭头函数中)。最里面的一个是使用参数(或变量)名称时使用的那个。

在arrow函数中替换name(),因此它不会声明自己的name参数;然后它将关闭name参数login

function login(name) {
    setTimeout(() =>{
// −−−−−−−−−−−−^^
        displayName(name);
    }, 2000);
}

默认情况下,setTimeout在浏览器上不会调用您为其提供任何参数的函数,因此name原始代码中arrow函数中参数将始终具有value undefined

在某些情况下,您可能希望setTimeout在调用计时器回调时将一个或多个参数传递给计时器回调,您可以通过在超时间隔之后传递参数来实现,例如:

function login(name) {
    setTimeout(innerName =>{
//             ^^^^^^^^^−−−−−−−− the arrow function's parameter
        displayName(innerName);
//                  ^^^^^^^^^−−− using the arrow function's parameter's value
    }, 2000, name);
//           ^^^^−−−−−−−−−−−−−−− `login`'s `name`
}

但是在您的示例中不需要这样做。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么 javascript 构造函数打印传递给它的参数?

为什么此函数不更新变量?

为什么此函数不传递优惠券数据以在 PHP Laravel 中查看?

当没有__init__方法时,为什么此代码将参数传递给构造函数?

自定义的reduce函数实现-为什么要传递此特定参数列表?

为什么不能使用模板模板参数将std :: vector <MyType>传递给此函数?

为什么不执行此JavaScript代码?

为什么这样传递lambda函数的参数?

为什么内联函数需要传递参数?

构造函数为什么不设置参数?

当将这些参数传递给类型化的函数时,为什么TypeScript不推断函数的参数类型?

为什么此JavaScript函数返回“ 2”?

参数e(事件)到底是什么?为什么将其传递给JavaScript函数?

为什么当一个函数类型参数传递,而不是消费者不,每个Java方法不抛出异常?

为什么第一个构造函数不传递参数自动运行,即使它不是默认构造函数?

为什么我收到错误消息,要求使用此超级初始化函数传递一个参数

为什么此函数(char *)不能通过ref传递?

为什么此函数在 Python 中不返回列表?

为什么此Python函数执行后不释放内存?

为什么此函数不返回指定范围的时间?

为什么此函数不返回值?

为什么此IF,OR和AND函数不返回TRUE?

为什么函数 Javascript 不执行?

为什么我的javaScript函数不触发?

当函数调用中的参数数与函数声明中的参数数不匹配时,为什么javascript不会抱怨?

为什么将“ null”作为参数传递给javascript中的函数?

Golang-为什么此函数更改输入参数?

为什么此函数的参数仍然是元组?

为什么此递归函数参数为nil?