Javascript调用函数

Javascript call function

本文关键字:函数 调用 Javascript      更新时间:2023-09-26

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

我有以下代码:

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

调用bye.call(hi(), 1, 2),得到hi 1 2 undefined

调用bye.cal(1,2),得到2 undefined bye undefined

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

第一个参数不一定是函数。第一个形参是在函数调用上下文中"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);

控制台应该显示:1,2,"bye"和1.

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

第一次打电话:

bye.call(hi(), 1, 2)

你正在调用hi()(所以它打印'hi'),返回值没有被使用,并且1和2是bye的参数。

第二次通话:

bye.cal(1,2)

1被赋值给this。2为参数,param2未定义

您正在获得未定义,因为您的函数不返回任何内容,它只将输出打印到屏幕上。所以,你的代码可以像这样:

var obj = {foo: "hi"};
var bye = function(param, param2){
    console.log(this.foo);
    console.log(param);
    console.log(param2);
}
bye.call(obj, 1, 2)   // "hi", 1, 2

你可以在MDN上阅读更多关于.call()的信息

fn.call()允许您设置调用函数时this将具有的值。this的值必须是fn.call()的第一个参数

调用方法需要所有的参数单独应用方法需要所有的参数在一个数组中,用例子解释

let solarSystem = {
    sun: 'red',
    moon : 'white',
    sunmoon : function(){
       let dayNight = this.sun + ' is the sun color and present in day and '+this.moon + ' is the moon color and prenet in night';
        return dayNight;
    }
}
let work = function(work,sleep){
    console.log(this.sunmoon()); 
    // accessing the solatSystem it show error undefine sunmmon untill now because we can't access directly for that we use .bind(),.call(),.apply()
    console.log('i work in '+ work +' and sleep in '+sleep);
}
let outPut = work.call(solarSystem,'day','night');
let outPut1 = work.call(solarSystem,['day1','night1']);
let outPut2 = work.apply(solarSystem,['day2','night2']);