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
相关产品推荐
相关产品推荐

