bilibili前端一面,有道题现在都没搞懂。

var a = 1;
var foo = {
    a: 2,
    bar: function () {
        return this.a;
    }
};
console.log(foo.bar());
console.log((foo.bar)());
console.log((foo.bar=foo.bar)());
这道题答案是我测试了一遍是2,2,1。为啥?有人能解释清楚吗。#面试题目##哔哩哔哩#
全部评论
var a = 1; var foo = {     a: 2,     bar: function () {         return this.a;     } }; console.log(foo.bar());  //这个很容易理解 bar函数的this绑定在foo对象上 console.log((foo.bar)()); //这个加不加括号都等同于上面 console.log((foo.bar=foo.bar)()); //这个可能比较难理解 因为里面是一个赋值运算 表达式返回的是foo.bar这个值 那么这个值是什么呢 其实是一个匿名函数  function () {    return this.a; } 所以 第三个console.log 可以等价为 console.log((function () {    return this.a; })()) 故打印出来就是全局上的a变量了 最后留个问题 console.log((a=foo.bar)()) 这个打印出的结果是什么呢
1 回复 分享
发布于 2021-03-15 20:28
可以看看这个https://www.jianshu.com/p/59be7936c345
点赞 回复 分享
发布于 2020-09-23 09:02
我也好奇
点赞 回复 分享
发布于 2020-09-23 17:31
插眼
点赞 回复 分享
发布于 2021-03-10 16:04
我测试是2、2、undefined
点赞 回复 分享
发布于 2021-03-15 19:57
赋值操作式全局操作,此时this指向window
点赞 回复 分享
发布于 2021-03-16 14:42

相关推荐

评论
2
8
分享
牛客网
牛客企业服务