当前位置:网站首页>js面试题:fn.call.call.call.call(fn2) 解析
js面试题:fn.call.call.call.call(fn2) 解析
2022-04-23 05:54:00 【迷失的骆驼】
有这样一道 JS面试题,问 fn.call.call.call.call(fn2) 的结果是什么?
先说下 call 函数的内部原理:
- 可以改变函数的this;
- 执行函数
下面模拟下 原生的call函数:
Function.prototype.call = function(context, ...args){
context = context? Object(context) : window;
// 改变 this
context.fn = this;
// 执行函数
return context.fn(...args);
}
如下:
function fn(){
console.log(11)
}
function fn2(){
console.log(22)
}
问:
fn.call.call.call.call(fn2) 的结果是什么?
解析:
- 前面的一串
fn.call.call.call.call并没有调用,只是获取对象的call属性,所以,这一串的结果是 Function.call 属性。 - 所以那一串 就是
Function.call.call(fn2);还可以解理为 fn3.call(fn2)。 - 根据call的原理(可参考上面的call模拟),在 fn3执行call,其实际是这样执行的
fn2.fn3()。 - 由于 fn3实际上就是 call 函数,所以, fn2.fn3() 等价于
fn2.call()。 - 所以,上面那一串代码的最终结果,就是调用 fn2,所以结果输出 22.
版权声明
本文为[迷失的骆驼]所创,转载请带上原文链接,感谢
https://blog.csdn.net/xufang461010923/article/details/108111226
边栏推荐
猜你喜欢
随机推荐
[UDS unified diagnosis service] IV. typical diagnosis service (1) - diagnosis and communication management function unit
汇编基础代码示例
修改注册表的值
HDU-Memory Control
cartographer_node 编译没问题,但是运行直接挂掉的bug
ES6新增方法
2022LDU寒假训练-程序补丁
记第一次使用阿里字体图标库
_findnext 报错
FOC电机库 定点PID代码分析
约瑟夫序列 线段树 O(nlogn)
Shell脚本 &&和||的使用
谈谈v-if显示隐藏问题
[opencv] use filestorage to read and write eigenvectors
导入文件时候 new FormData()
js根据名字将数组对象中名字相同的项组成一个相同的数组
Using printf in MFC
[UDS unified diagnostic service] III. application layer protocol (1)
2022ldu winter vacation training - program patch
Makefile基础、常用函数及通用Makefile








