function fn1(){ console.log(1); } function fn2(){ console.log(2); } fn1.call(fn2); // 输出1 fn1.call.call(fn2); // 输出2
看到这个问题,第一反应是蒙圈的。
fn1.call(fn2); 这个是明白的。
fn1.call.call(fn2);这个蒙圈了。
有些绕,需要多念叨念叨琢磨琢磨。
call 方式是Function.prototype原型上天生自带的方式,所有的函数都可以挪用的。
我以为 call方式自己没有详细return什么出来,以是是undefined。
Function.prototype.call=function call(context){ // [native code] // call方式的功效 // 1. 把指定函数中的this指向context // 2. 把指定函数执行 // 那么call方式中的this,即为指定函数。也就是说 // 1. 把this中 的 this关键字指向context; // 2. 把指定函数执行this(); };
根据上面的明白
以是挪用的是 fn1 ,此时fn1中的 this 指向的是 fn2。
然则这个方式内里并没有使用this,而是直接输出了1。
根据上面的明白
以是挪用的是 fn2(这里有些绕,多念叨念叨琢磨琢磨),此时fn1.call中的this指向的是fn2。
它改变了call方式(Function.prototype原型上的call)的this指向。
此处挪用了call方式中的this,即挪用了fn2,输出了2。
来自:https://segmentfault.com/a/1190000019654594
1.阿里云: 本站现在使用的是阿里云主机,平安/可靠/稳固。点击领取2000米代金券、领会最新阿里云产物的种种优惠流动点击进入
2.腾讯云: 提供云服务器、云数据库、云存储、视频与CDN、域名等服务。腾讯云各种产物的最新流动,优惠券领取点击进入
3.广告同盟: 整理了现在主流的广告同盟平台,若是你有流量,可以作为参考选择适合你的平台点击进入
链接: http://www.fly63.com/article/detial/3997