【转】外国朋友出的js题目,你能对几道
发布时间:2020-12-26 10:10:17 所属栏目:交互 来源:网络整理
导读:原文地址?http://perfectionkills.com/javascript-quiz/ 中文地址加解释:by Aaron:http://www.cnblogs.com/aaronjs/p/3172112.html 附带了自己的理解,答案有争议的地方欢迎大家指出 题目一 2 3 4 ( function (){ ?? return ? typeof ? arguments; })(); ?
副标题[/!--empirenews.page--]
原文地址?http://perfectionkills.com/javascript-quiz/ 中文地址加解释:by Aaron:http://www.cnblogs.com/aaronjs/p/3172112.html 附带了自己的理解,答案有争议的地方欢迎大家指出 题目一arguments是对象,伪数组有两件事要注意这里: 参数不是数组,它是一个数组一样的物体,你可以使用方括号和整数索引的元素,但方法通常可在一个如推上不存在参数数组 Array.prototype.slice.call(arguments); 转成数组 当然arguments即使是数组,返回的依然是"object",因为数组也是对象,附加:typeof?对类型的判断 https://developer.mozilla.org/zh-CN/docs/JavaScript/Reference/Operators/typeof
题目二因为function g(){?return?23; }是函数表达式,事实上只有事一个名字,不是一个函数声明 函数实际上是绑定到变量f,不是g. 指定的标识符在函数表达式虽然有其用途:堆栈跟踪是清晰而不是充斥着无名的函数,你可以有一个匿名函数递归调用本身不使用argument.callee 附非常详细的帖子函数表达式 http://kangax.github.io/nfe/
题目三参数不可删除 见我发过的帖子(js中的delete定义) http://www.cnblogs.com/aaronjs/articles/3148934.html 国外的帖子(理解删除) http://perfectionkills.com/understanding-delete/
题目四通过重写代码如下结果: var?a,b; 展开就是?var?a;?var?b;. A = B = C;相当于 B = C = B; 知道了这一点,我们重写并得到: var?y = 1;? y =?typeof?x;? var?x = y;? x;? 当执行 y =?typeof?x时,x 还没有被定义,所以y成为字符串"undefined",然后被分配到x
题目五为了便于理解我们继续分解: 第一部分 var?baz =?function(){?return?1; };? 第二部分 (function?f(f){? ??return?typeof?f();? })(baz);? 在这里,函数f接受一个参数是另一个函数,f函数内部执行这个实参函数并且返回类型 无论是从调用该函数返回,即使参数名称f与函数名冲突,函数接受本身作为自己的参数,然后调用,此时就看谁更具有更高的优先级了,显然,参数的优先级更高,所以实际执行的是returntypeof?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"了 附上博文 http://www.cnblogs.com/aaronjs/archive/2011/09/02/2164009.html MDC https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Special_Operators/this_Operator#Description 题目七var foo = { bar: function(){ return this.baz; },baz: 1 } typeof (f = foo.bar)(); "undefined" 继续改写一下: var foo = { bar: function(){ return this.baz; },baz: 1 } f = foo.bar; typeof f(); 把foo.bar存储给f然后调用,所以this在foo.bar引用的是全局对象,所以就没有baz属性了 换句话说 foo.bar执行的时候上下文是 foo,但是当 把 foo.bar 赋值给 f 的时候,f 的上下文环境是 window ,是没有 baz 的,所以是 ”undefined" (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |