这是一道综合性的题目,如果你能快速清晰的分析整理出来,那我相信你对JavaScript是有一定的理解的了。我会先将题目的图片截取出来,供大家思考,在结尾在给出我的分析过程和答案,作个总结。

好,废话不多说啦,我们马上来看看!

  好,希望大家现在好好思考一下,result的值会是多少。下面我会给出答案。

  我们用node打印一下看看

  答案是 -2,亲爱的朋友们,你做对了吗?


下面我将写出我对这题的思路解析,仅供参考噢。

  我们直接看到函数调用 partialFn(f, 2) ,这里的意思就是传入两个参数啦,一个是函数指针,另一个是2。接下来就看到 partialFn函数,首先就是定义了 args的变量,用于存放传入参数的实参对象 arguments。arguments 是函数的实际参数的引用,即使形参没有定义。那这样的话,args 的值应该是 {"0" : "[function]", "1" : 2}。然后        partialFn 函数就结束,并且return出一个匿名函数(闭包的前兆啊!),紧接着这个匿名函数就被调用了,传入了(3, 4)两个参数。

  我们接着看返回的匿名函数里有什么。首先匿名函数里,定义了一个 a 变量用于存放 array 函数返回的值,array 函数传入了两个参数,一个是它的父函数的变量args(果然嘛,闭包来了),这里形成了一个闭包,args的值会保存在内存中。另一个参数是1。

  那就往 array 的函数里看,两个形参,然后是 call 一个数组的 slice 方法,第一个参数作为执行 slice 函数的对象,也就是 args ,然后下一个参数就是 slice 的参数,那这里的意思就是从序号 1 一直截到尾,然后返回截取到的数组。那这里就是说, args 对象执行一个数组的 slice 方法,然后从第二个截取到末尾,返回了一个数组 [2],存入变量 a 中。好,把 array 实际要做什么的弄懂了,我们接着看。

  这里又用了一次 array 函数,但是只传了一个参数 arguments,切记这个 arguments 已经不是第一次我们见到的 arguments了,这个是 arguments 里是传入的3和4。那自然这里就仅仅是将对象转换成数组返回出来 [3, 4]。接下来就简单易懂啦,让数组 a 和 这个数组进行 concat 方法,再保存在变量 a 中,此时 a 就是[2, 3, 4]。

  最后使用 apply 方法,第一个参数 this 也就是本身啦,然后第二个参数是将数组 a 当作参数传入 f 函数里,嗯,小学生的计算时刻 2*(3-4) = -2,别告诉这你不会做啊!

  

完结撒花!希望这篇博文可以帮助 JavaScript 基础知识不扎实的同学们,能有更高的认识。高手们,可以过过瘾,装装逼。

  对了,还是那句话,有错误请指出,我会尽快修改,以免误人子弟。

分享一道我认为非常有思考价值JavaScript题目的更多相关文章

  1. 看看国外的javascript题目,你能全部做对吗?(分享)

    本文转自@Aaron的博客,拿过来分享一下.原文:看看国外的javascript题目,你能全部做对吗? 题目一: (function(){ return typeof arguments; })(); ...

  2. 【腾讯Bugly干货分享】微信小程序开发思考总结——腾讯“信用卡还款”项目实践

    本文来自于腾讯bugly开发者社区,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/58212d0fa7a7574c4f4cc3c5 作者:peggy 小程序概述 1 ...

  3. (转)c++类的成员函数存储方式(是否属于类的对象)---一道面试题引发的思考

    昨天去面试一家公司,面试题中有一个题,自己没弄清楚,先记录如下: class D { public: void printA() { cout<<"printA"< ...

  4. 一道面试题引发的思考(C#值类型和引用类型)

    某年某月,笔者去面试招行的一个外包项目,辗转来到面试地点以后,面试官给了我一份试卷,试卷只有两道题目,其中一道是这样的: 阅读以下程序 class Program { struct Point { p ...

  5. 阿里NLP总监分享-NLP技术的应用与思考

    https://yq.aliyun.com/articles/78031 NLP技术的应用及思考

  6. 分享一道JS前端闭包面试题

    输出以下代码的结果 function fun(n,o){ console.log(o); return { fun:function(m){ return fun(m,n);//[1] } } } v ...

  7. 一道CTF题引发的思考——SSI注入

    题目地址:http://210.32.4.22/index.php 一开始我一直考虑的用<!--#include file="文件"-->的格式进行读取文件,但是一直不 ...

  8. 关于一道JS面试题的思考

    题目: ; i < ; i++) { setTimeout(function() { console.log(new Date, i); }, ); } console.log(new Date ...

  9. 分享一道阿里巴巴(蚂蚁金服)Java笔试题

    编写一个函数验证一个给定的9x9 整数矩阵是否符合数独的特性:a) 每个单元格数字为 1-9b) 每行的9个数不重复c) 每列的9个数不重复d) 如图中分割的9个小3x3矩阵,每个小矩阵里9个数不重复 ...

随机推荐

  1. jpa-hibernate配置转换

    persistence.xml spring-demo-cfg.xml hibernate配置文件 Spring Data JPA:为简化JPA的开发提供帮助.EntityManager的创建与销毁. ...

  2. Altium Designer哪里下载和导入元件库_图文教程

    http://jingyan.baidu.com/article/46650658064621f549e5f88f.html

  3. Mongodb查询的用法,备注防止忘记

    最近在用这个东西,为防止忘记,记下来. 集合简单查询方法 mongodb语法:db.collection.find()  //collection就是集合的名称,这个可以自己进行创建. 对比sql语句 ...

  4. add-two-numbers-ii

    注意:有一种好的方法,是将链表倒转,然后依次相加. 但是,按照题目要求,用了不改变原链表的方法. 就是将两个链表增加到相同长度,然后递归相加,子函数返回后处理进位. https://leetcode. ...

  5. 如何使用 Java 测试 IBM Systems Director 的 REST API

    转自: http://www.ibm.com/developerworks/cn/aix/library/au-aix-systemsdirector/section2.html 如何使用 Java ...

  6. Linux查看所有用户用什么命令

    用过Linux系统的人都知道,Linux系统查看用户不是会Windows那样,鼠标右键看我的电脑属性,然后看计算机用户和组即可. 那么Linux操作系统里查看所有用户该怎么办呢?用命令.其实用命令就能 ...

  7. Codeforces Round #254 (Div. 2) B. DZY Loves Chemistry (并查集)

    题目链接 昨天晚上没有做出来,刚看题目的时候还把题意理解错了,当时想着以什么样的顺序倒,想着就饶进去了, 也被题目下面的示例分析给误导了. 题意: 有1-n种化学药剂  总共有m对试剂能反应,按不同的 ...

  8. basicjava

    .完数 . 第一个完全数是6,它有约数1.2.3.6,除去它本身6外,其余3个数相加,1+2+3=6.第二个完全数是28,它有约数1.2.4.7.14. 28,除去它本身28外,其余5个数相加,1+2 ...

  9. sql server 数据库 ' ' 附近有语法错误

    昨天做项目时候,遇到标题的问题,代码跟踪把sql 语句 复制出来在数据库执行不了, 然后重新写个一模一样的,然后在 赋值到代码中,还是同样的错误, 就是不知道哪里出现了错误,最后 把 sql 语句写成 ...

  10. ASP.NET MVC Html.ActionLink使用说明

    本文整理了该方法的几种重载形式: 1.Html.ActionLink("linkText","actionName")该重载的第一个参数是该链接要显示的文字,第 ...