专栏名称: JavaScript
面向JavaScript爱好人员提供:前端最新资讯、原创内容、JavaScript、HTML5、Ajax、jQuery、Node.js等一系列教程和经验分享。
目录
相关文章推荐
51好读  ›  专栏  ›  JavaScript

看看国外的十三道 JavaScript 题,你能全部做对吗?

JavaScript  · 公众号  · Javascript  · 2017-05-05 22:47

正文

请到「今天看啥」查看全文


(){ return 1 ; });

答案:”number”

为了便于理解我们继续分解:

第一部分

var baz = function(){ return 1; };

第二部分

(function f(f){

 return typeof f();

})(baz);

在这里,函数f接受一个参数是另一个函数,f函数内部执行这个实参函数并且返回类型

无论是从调用该函数返回,即使参数名称f与函数名冲突,函数接受本身作为自己的参数,然后调用,此时就看谁更具有更高的优先级了,显然,参数的优先级更高,所以实际执行的是return typeof 1

题目六

var foo = {

 bar: function() { return this.baz; },

 baz: 1

};

 

(function(){

 return typeof arguments[0]();

})(foo.bar);

答案: “undefined”

为什么是”undefined”?我们必须要知道this运算符是怎么工作的。

JS语言精粹总结的很精炼:

  1. 纯粹的函数调用

  2. 作为对象方法的调用

  3. 作为构造函数调用

  4. apply调用

我们看看题目是属于那种环境?

在arguments 0 中执行了一个方法,arguments[0]就是foo.bar方法,注意:这在foo.bar中的this是没有绑定到foo。虽然 foo.bar 传递给了函数,但是真正执行的时候,函数 bar 的上下文环境是 arguments,并不是 foo。

arguemnts[0] 可以理解为 arguments.0(不过写代码就不要这样了,语法会错误的),所以这样看来,上下文环境是 arguemnts 就没问题了,所以在执行baz的时候自然this就是window了,window 上没有baz属性,返回的就是undefined,typeof调用的话就转换成”undefined”了。

题目七

var foo = {

 

bar: function(){ return this.baz; },

 

baz: 1

 

}

 

typeof (f = foo.bar)();

答案 “undefined”

继续改写一下:

var







请到「今天看啥」查看全文