做会这道题,你就搞懂this的指向了

肯定是非严格模式,严格模式的undefined没啥意思

var num = 1;

var obj = {num: 2};

obj.fn = (function(num) {

this.num = num * 4;

num++;

return function(n) {

this.num += n;

num++;

console.log(num);

}

})(obj.num);

var fn = obj.fn;

fn(6);

obj.fn(7);

console.log(num);

console.log(obj.num);

#前端#
全部评论
兄弟们 在命令行进入node粘贴代码的结果和浏览器一致 写在文件里用node执行不一致 有大佬知道为啥吗
2 回复 分享
发布于 08-11 00:01 上海
浏览器 4 5 14 9,立即执行函数的 this 指向全局对象 window,开始的全局变量 num 变为 8,接着调用 fn(6),this 同样指向 window,所以全局 num 变为 14,根据就近原则,num++ 执行了两次,所以第一次打印 4,调用 obj.fn,此时 this 指向 obj,obj.num = 2 + 7 = 9,num 和第一步是一样,num++ 变成 5,所以第一次打印 5,console.log(num) 打印全局变量,前面说过是 14,最后 console.log(obj.num),前面说过是 9; node 环境里,由于 var 并不会添加到全局对象上,所以立即执行函数里的 this.num = num * 4 并不会修改全局 num,最后 console.log(num) 打印 1 太抽象了这道题
1 回复 分享
发布于 08-10 22:11 浙江
天翼云科技有限公司
校招火热招聘中
官网直投
node 和浏览器结果不一样
点赞 回复 分享
发布于 08-10 20:34 浙江
14和9吧 其实就是谁调用指向谁
点赞 回复 分享
发布于 08-10 20:55 上海
太抽象了这题。。。
点赞 回复 分享
发布于 08-10 23:19 上海
@贪食滴🐶文字太多放不下,之前写过的手写 commonjs
点赞 回复 分享
发布于 08-11 00:14 浙江
点赞 回复 分享
发布于 08-13 09:28 山东
绕晕了
点赞 回复 分享
发布于 08-13 15:07 北京

相关推荐

5 3 评论
分享
牛客网
牛客企业服务