首页新闻找找看学习计划

js面试题一道

0
悬赏园豆:10 [已解决问题] 解决于 2016-09-13 22:44
var foo = {
            bar: function () {
                return this.baz;
            },
            baz: 1
        };
        console.log(
            (function () {
                return typeof arguments[0]();
            })(foo.bar)
        );

输出是"undefined".

我的思路是这样的

arguments[0]实际上是函数foo.bar.

然后直接执行这个函数来到第三行. 这样this指的是window, 而window没有baz, 所以输出undefined.

 

实际上, 答案确实是undefined, 只不过我的过程是错误的. 第三行的this根本不是window,

而是这个东东(如下图), 想问一下, 这个东东是什么东西? 暂时理解不了.

谢谢

MyCoolDog的主页 MyCoolDog | 初学一级 | 园豆:95
提问于:2016-09-13 21:48
< >
分享
最佳答案
1

今天回复了一个同类的题目,可以参考一下:https://q.cnblogs.com/q/86155/ 

收获园豆:10
幻天芒 | 高人七级 |园豆:36522 | 2016-09-13 21:54

我艹. 多谢~!

 

MyCoolDog | 园豆:95 (初学一级) | 2016-09-13 22:43
 //var _g;
        var foo = {
            bar: function () {
                //_g==this ==>true. 调用者为arguments对象, 类似于下面被注释的代码 foo.bar()
                return this.baz;
            },
            baz: 1
        };
        //console.log(foo.bar());
        console.log(
            (function () {
                _g = arguments;
                return typeof arguments[0]();
            })(foo.bar)
        );//输出"undefined"

弄个完整版. 

MyCoolDog | 园豆:95 (初学一级) | 2016-09-13 22:55

@MyCoolDog: :)

幻天芒 | 园豆:36522 (高人七级) | 2016-09-14 11:02
其他回答(2)
0

指向arguments 啦

btg.yoyo | 园豆:67 (初学一级) | 2016-09-23 17:13
0

其实考的还是js闭包,this指向function () { return this.baz; },而改函数没有baz属性,单个返回的是undefined

张云山 | 园豆:642 (小虾三级) | 2016-09-27 10:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册