这是一道综合性的题目,如果你能快速清晰的分析整理出来,那我相信你对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. 设计模式之Inheritance versus Parameterized Types 继承和参数化类型

    Another (not strictly object-oriented)technique for reusing functionality is through parameterized t ...

  2. soap协议有get方式

    今天去面试,被问到了这个问题.一时没想起来.考官的说法是没有 get,使用post 发请求.restful 有get put delete等谓词. 特地查了一下.记在下边. <system.we ...

  3. Image.FrameDimensionsList 属性备注

    Image.FrameDimensionsList 属性 .NET Framework 2.0   获取 GUID 的数组,这些 GUID 表示此 Image 中帧的维数. 命名空间:System.D ...

  4. BZOJ 1297 迷路(矩阵)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1297 题意:给出一个带权有向图,权值为1-9,顶点个数最多为10.从1出发恰好在T时刻到 ...

  5. 【转载】Java中如何写一段内存泄露的程序 & ThreadLocal 介绍和使用

    可以参考这段文章: link A1:通过以下步骤可以很容易产生内存泄露(程序代码不能访问到某些对象,但是它们仍然保存在内存中): 上文中提到了使用ThreadLocal造成了内存泄露,但是写的不清不楚 ...

  6. centos的版本和内核查看

    查看linu的内核信息 查看distrubution,centos属于哪个release

  7. $http POST 转字符串

  8. Svn正确的使用方法

    想必大家现在都比较喜欢使用svn(subversion)完成代码管理了,因为它的开源,轻巧,易用.但是这样一个宝贝如果不知道其正确的用法,也会让我们百思不得其解,甚至耽误项目进度,浪费程序员的心血和结 ...

  9. 【大数加法】POJ-1503、NYOJ-103

    1503:Integer Inquiry 总时间限制:  1000ms 内存限制:  65536kB 描述 One of the first users of BIT's new supercompu ...

  10. js一些平时会用到的

    如何屏蔽页面js错误    <script language="javascript">    function killErrors()    {        re ...