一些javascript一些题目的解析

http://perfectionkills.com/javascript-quiz/
  下面是我关于这些题目的,一些关于自己的理解. 如果有什么不同的意见或者见解,欢迎拍砖.


代码如下:

(function(){
return typeof arguments;
})();

这个题目比较简单, 只要大家不觉得 arguments 是 array ,就可以了.
返回是 object.


代码如下:

var f = function g(){ return 23; };
typeof g();

翻翻 aiming 的书,会发现里面对function 的解释, 以及几种创建方式有比较完全的描叙的, 这个陷阱,在下面的多个题目中有出现. 小心.
返回是 undefined.


代码如下:

(function(x){
delete x;
return x;
})(1);

Javascript 的delete, 删除的不是引入或者指向的对象. 而是对象本身.
/*
资料
  delete 运算符
    从对象中删除一个属性,或从数组中删除一个元素。
  delete expression
    expression 参数是一个有效的 JScript 表达式,通常是一个属性名或数组元素
所以,这里的形参的改变, 与他是没关系的.
*/
关于delete的具体解析,有园友给出了那个题目部分原本的解释,粗心了没去看,呵呵
http://perfectionkills.com/understanding-delete/
返回 1.


代码如下:

var y = 1, x = y = typeof x;
x;

这个部分有个小陷阱. 呵呵.
x= undefined , 大家知道. 然后 typeof x, 实际上也就是 typeof "undefined". 呵呵
返回的,当然是 string 了.


代码如下:

(function f(f){
return typeof f();
})(function(){ return 1; });

恩, 陷阱又来拉.哈哈. 此f 是什么呢? 于形参是没关系的,而且,你也取不到的.
所以, 形参没任何改变.
所以, 返回 number .

代码如下:

var foo = {
bar: function() { return this.baz; },
baz: 1
};
(function(){
return typeof arguments[0]();
})(foo.bar);

这个地方. 主要是考虑的 this的上下文. 传入的是 foo.bar,而非他的父级.
所以, 返回 undefined .

代码如下:

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;

if 里的东西,是肯定可以执行的.因为他是一个实际的存在(object). 非null|underfined的对象,在if下都是可以继续的 . 但是, 和上面的都是一样的原理, f ,却是不存在的.
所以 返回 1undefined.

代码如下:

var x = [typeof x, typeof y][1];
typeof typeof x;

这里 ,typeof y ,undefined. 然后, typeof typeof undefined => vtypeof "undefined"
返回 "string".

代码如下:

(function(foo){
return typeof foo.bar;
})({ foo: { bar: 1 } });

呵呵, 这里是个小陷阱, 如果看得太快了容易进去的哦.
简单的描叙下, var fo = {foo:{bar:1}}; function(foo){})(fo);
return typeof foo.bar ==> return typeof fo.bar
所以返回 "undefined".

代码如下:

(function f(){
function f(){ return 1; }
return f();
function f(){ return 2; }
})();

这个题目, 是关于编译器对function的解析了. 于return 没关系. 当他把return 只看成一个string的时候, 编译器已经解析过了所有的function . 与var f = function(){} 这样的是不同的.
所以, 会返回 2.

代码如下:

function f(){ return f; }
new f() instanceof f;

这个地方理解不够, 瓶子给出的解释貌似看得过去
new f() 得到的是f 的本身, 而不是一个new的对象, 因此,不是f 的实例.
所以, 返回 false.

with (function(x, undefined){}) length;
关于 with 这块, 如果我把 with也看成一个function(和想像alert一样).
那这个length, 就是with的形参长度了.
返回 2.
好了. 看来很多关于js的问题, 其实还是需要梳理下的. aiming 大大的书,关于这部分的讲解很给力. 可以让人绕过一些陷阱和问题.剩下的就是一些自己的测试了.
这些题目并不能够完全的反映出一个人的js能力, 但是至少能够让人知道编译器是怎么样去处理js的

(0)

相关推荐

  • JavaScript 一道字符串分解的题目

    去某公司(公司名不说了,人这套题说不定还要用)面试,现场30分钟做了一套题,其中有一道是这样的: 要求用js写一个函数,对传入的形如下网址字符串,返回对应的对象. 如: 若传入字符串a='?name=zhiyelee&blog=www.tsnrose.com'; 则返回 b={'name':'zhiyelee','blog':'www.tsnrose.com'} 当时由于时间比较短,实现的有些问题,回来后想了一下,总结如下: 我想到了两种思路,一种是使用正则表达式,第二种是使用字符串的split

  • javascript题目,重写函数让其无限相加

    function add(x) {________}; alert(add(2)(3)(4)); //填空,使结果为9 解法一, 复制代码 代码如下: //貘大 function add(x) { var c = 0; return function(x) { c = c + x ; arguments.callee.toString = function(){ return c; }; return arguments.callee; }(x); }; alert(add(2)(3)(4));

  • javascript笔试题目附答案@20081025_jb51.net

    一.单选题 1.以下哪条语句会产生运行错误:(A) A.var obj = ( ); B.var obj = [ ]; C.var obj = { }; D.var obj = / /; 2.以下哪个单词不属于javascript保留字:(B) A. with B. parent C. class D. void 3.请选择结果为真的表达式:(C) A. null instanceof Object B. null === undefined C. null == undefined D. Na

  • javascript实现C语言经典程序题

    最近在学习Javascript语言,看到网上很多都是在介绍Javascript如何解决网页上问题的代码,所以想另辟蹊径,用Javascript代码来实现C语言经典程序题.当然,这些C语言程序题也是比较简单,主要想通过Javascript语言实现,起到语法练习作用,也想来对比一下C语言和Javascript语言实现的相同点和不同点,从而巩固记忆,加强学习效果!!! 一.C语言经典程序题1 1. 题目描述: 马克思的手稿中有这样一道有趣的数学题:有30个人,其中有男人,女人,小孩.他们在一家饭馆中吃

  • 一些javascript一些题目的解析

    http://perfectionkills.com/javascript-quiz/ 下面是我关于这些题目的,一些关于自己的理解. 如果有什么不同的意见或者见解,欢迎拍砖. 复制代码 代码如下: (function(){ return typeof arguments; })(); 这个题目比较简单, 只要大家不觉得 arguments 是 array ,就可以了. 返回是 object. 复制代码 代码如下: var f = function g(){ return 23; }; typeo

  • 跟我学习javascript的var预解析与函数声明提升

    1.var 变量预编译 JavaScript 的语法和 C .Java.C# 类似,统称为 C 类语法.有过 C 或 Java 编程经验的同学应该对"先声明.后使用"的规则很熟悉,如果使用未经声明的变量或函数,在编译阶段就会报错.然而,JavaScript 却能够在变量和函数被声明之前使用它们.下面我们就深入了解一下其中的玄机. 先来看一段代码: (function() { console.log(noSuchVariable);//ReferenceError: noSuchVari

  • JavaScript中的正则表达式解析

    JavaScript中的正则表达式解析 正则表达式(regular expression)对象包含一个正则表达式模式(pattern).它具有用正则表达式模式去匹配或代替一个字符串(string)中特定字符(或字符集合)的属性(properties)和方法(methods).要为一个单独的正则表达式添加属性,可以使用正则表达式构造函数(constructor function),无论何时被调用的预设置的正则表达式拥有静态的属性(the predefined RegExp object has s

  • javascript运算符——逻辑运算符全面解析

    前面的话 逻辑运算符对操作数进行布尔运算,经常和关系运算符一样配合使用.逻辑运算符将多个关系表达式组合起来组成一个更复杂的表达式.逻辑运算符分为逻辑非'!'.逻辑与'&&'.逻辑或'||'3种,本文将介绍这三种逻辑运算符 逻辑非 逻辑非操作符由一个叹号(!)表示,可以应用于ECMAScript中的任何值.无论这个值是什么数据类型,这个操作符都会返回一个布尔值.逻辑非操作符首先会将它的操作数转换成一个布尔值,然后再对其求反 逻辑非对操作数转为布尔类型的转换类型与Boolean()转型函数相同

  • JavaScript:Array类型全面解析

    JavaScript中的数组类型与其他语言中的数组有着很大的区别.JavaScript中的每一项可以保存任何类型的数据.而且,JavaScript数组的大小是可以动态调整的,可以随着数据的添加自动增长以容纳新增数据. 创建数组的基本形式有两种. 1.Array构造函数 var cities = new Array(); 如果预先知道要保存的项目数量,也可以给构造函数传递该数量,该数量会自动变成length属性的值. var cities = new Array(3); 也可以向Array构造函数

  • JavaScript:Date类型全面解析

    创建一个日期对象,使用new操作符后跟Date的构造函数. var date = new Date(); 调用默认构造函数情况下,新创建的日期自动获得当前时间和日期.如果需要指定日期和时间,需要传入表示该日期的毫秒数. JavaScript中提供了两个方法来计算日期,Date.parse()方法接收一个表示日期的字符串参数,然后根据这个日期返回相应的日期毫秒数.但是日期的格式往往因实现以及地区而异.Date.UTC()也返回表示日期的毫秒数,它的参数分别是年份.基于0的月份(一月是0).月中的那

  • javaScript中的原型解析【推荐】

    最近在学习javaScript,学习到js面向对象中的原型时,感悟颇多.若有不对的地方,希望可以指正. js作为一门面向对象的语言,自然也拥有了继承这一概念,但js中没有类的概念,也就没有了类似于java中的extends,所以,我觉得js中的继承主要依赖于js中的原型(链). 那么,原型是什么呢?我们知道js中函数亦是一种对象,当我们创建一个函数时,其实这个函数也就默认的拥有了一个属性叫做prototype,这个属型叫做原型属性,他是一个指针,指向了这个函数的原型对象,这个原型对象有一个默认的

  • javascript闭包概念简单解析(推荐)

    关于"闭包"这个概念的文章在网上铺天盖地,基本已经稀烂了,但是有时候总感觉读了这么多的文章还是云山雾罩,当然是由于它本身就比较难于理解和涉及的知识较多,还有一个很重要的原因就是网上很多教程介绍可能存在一定的误区,或者说侧重点不同,下面就通过代码实例简单的介绍一下什么是闭包. 代码实例一: function a(){ var webName="我们"; console.log(webName); } a() 以上是一段非常简单的代码,当函数执行结束之后,它就会从内存中

  • JavaScript fetch接口案例解析

    在 AJAX 时代,进行 API 等网络请求都是通过 XMLHttpRequest 或者封装后的框架进行网络请求. 现在产生的 fetch 框架简直就是为了提供更加强大.高效的网络请求而生,虽然在目前会有一点浏览器兼容的问题,但是当我们进行 Hybrid App 开发的时候,如我之前介绍的 Ionic 和 React Native,都可以使用 fetch 进行完美的网络请求. 如果看网上的fetch教程,会首先对比XMLHttpRequest和fetch的优劣,然后引出一堆看了很快会忘记的内容(

  • javascript History对象原理解析

    这篇文章主要介绍了javascript History对象原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 length history.length属性保存着历史记录的URL数量.初始时,该值为1.由于IE10+浏览器在初始时返回2,存在兼容性问题,所以该值并不常用 跳转方法 go().back()和forward() 如果移动的位置超出了访问历史的边界,以上三个方法并不报错,而是静默失败 [注意]使用历史记录时,页面通常从浏览器缓存之

随机推荐