JavaScript 调用函数

Rod*_*nte 3 javascript parameters function call

我最近一直在测试一些代码,试图更好地理解 javascript。然后我遇到了call()我无法很好理解的函数。

我有以下代码:

function hi(){
    console.log("hi");
}

var bye = function(param, param2){
    console.log(param);
    console.log(param2);
    console.log("bye");
}
Run Code Online (Sandbox Code Playgroud)

如果我打电话bye.call(hi(), 1, 2),我会得到hi 1 2 undefined

如果我打电话bye.cal(1,2),我会得到2 undefined bye undefined

据我了解,call()函数的第一个参数必须是一个函数,后面是我的函数接受的参数数量bye。但是最后一个未定义从哪里来呢?

Guy*_*ton 5

第一个参数不必是函数。第一个参数是在函数调用上下文中设置“this”变量的对象。

var bye = function(param, param2){
    console.log(param);
    console.log(param2);
    console.log("bye");
    console.log(this.x)
}

t = {'x': 1};

bye.call(t, 1, 2);
Run Code Online (Sandbox Code Playgroud)

控制台应显示:1、2、“再见”和 1。

未定义的是函数的返回值。

在您的第一次通话中:

bye.call(hi(), 1, 2)
Run Code Online (Sandbox Code Playgroud)

您正在调用 hi() (因此它打印“hi”),不使用返回值,1 和 2 是 bye 的参数。

在您的第二次通话中:

bye.cal(1,2)
Run Code Online (Sandbox Code Playgroud)

1 被分配给此。2 是 param,param2 未定义。