You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中call调用函数自动输出?未打印变量却出结果的疑问

解答你的JavaScript函数调用疑问

Hey there, let's break this down step by step so it makes total sense!

第一个疑问:为什么没打印fn却输出了sullivan?

核心原因很直接——call()方法会立即执行目标函数,不管你是否把它的返回值赋值给变量。

看这段代码:

var fn = obj.getName.call({name:'sullivan'})

call()在这里的作用有两个:一是把getName内部的this指向你传入的{name:'sullivan'}对象,二是直接触发getName函数的执行。而getName函数本身就包含console.log(inside:${this.name})语句,所以当call()执行时,这个打印操作就直接触发了,和你有没有用console.log(fn)完全无关。

第二个疑问:修改后加console.log(fn)会输出什么?

咱们先看getName的定义:

getName(){ console.log(`inside:${this.name}`) }

这个函数没有写任何return语句,在JavaScript里,没有显式返回值的函数默认会返回undefined。所以obj.getName.call({name:'sullivan'})执行后,会把undefined赋值给fn,最后console.log(fn)就会打印出undefined。

完整流程的输出梳理

修改后的代码执行时,会按顺序输出:

inside:ian
inside:oliver
inside:sullivan
undefined

内容的提问来源于stack exchange,提问作者sullivan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:32:11