前端工程师有时候面试时会遇到一类面试官,他们问的问题对于语言本身非常较真儿,往往不是候选人可能期待的面向实际的问题(有些候选人强调能干活就行,至于知不知道其中缘由是无关痛痒的)。这类题目,虽然没有逻辑,但某种程度说,确实考察了候选人对于 突然想到这个话题是无聊在翻自己的Github,看看以前都写过什么丑货。然后翻到了这篇解释Javascript quiz的文章quiz-legend,反正没事儿,就想搬过来供大家学习、理解、背诵、批判。 (function(){ return typeof arguments;//"object"})();
var f = function g(){ return 23; };typeof g();//报错 这是一个名字是 这里的函数名
(function(x){ delete x; return x;//1})(1);
delete object.propertydelete object['property']
我们试图分解上述代码成下面两步: var y = 1; //step 1var x = y = typeof x; //step 2 第一步应该没有异议,我们直接看第二步
(function f(f){ return typeof f();//"number"})(function(){ return 1; }); 直接上注释解释: (function f(f){ //这里的f是传入的参数function(){ return 1; } //执行的结果自然是1 return typeof f(); //所以根据问题一的表格我们知道,typeof 1结果是"number"})(function(){ return 1; }); var foo = { bar: function() { return this.baz; }, baz: 1}; (function(){ return typeof arguments[0]();//"undefined"})(foo.bar); 这里你可能会误以为最终结果是 var foo = { bar: function(){ return this.baz; }, baz: 1}typeof (f = foo.bar)();//"undefined" 这和上一题是一样的问题, var f = (function f(){ return '1'; }, function g(){ return 2; })();typeof f;//"number" 逗号操作符 对它的每个操作对象求值(从左至右),然后返回最后一个操作对象的值 所以 var x = 1;if (function f(){}) { x = typeof f; } x;//"1undefined" 这个问题的关键点,我们在问题二中谈到过, var x = [typeof x, typeof y][1]; typeof typeof x;//"string"
(function(foo){ return typeof foo.bar;//"undefined"})({ foo: { bar: 1 } }); 这是个纯粹的视觉诡计,上注释 (function(foo){ //这里的foo,是{ foo: { bar: 1 } },并没有bar属性哦。 //bar属性是在foo.foo下面 //所以这里结果是"undefined" return typeof foo.bar; })({ foo: { bar: 1 } }); (function f(){ function f(){ return 1; } return f();//2 function f(){ return 2; } })(); 通过 (function f(){ function f(){ return 1; } function f(){ return 2; } return f(); })(); function f(){ return f; }new f() instanceof f;//false 当代码
于是,我们这里的 with (function(x, undefined){}) length;//2
OK,现在我们来看,由于 | ||||||||||||||||||||
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|