这是一道综合性的题目,如果你能快速清晰的分析整理出来,那我相信你对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. 【原创】Leetcode -- Reverse Linked List II -- 代码随笔(备忘)

    题目:Reverse Linked List II 题意:Reverse a linked list from position m to n. Do it in-place and in one-p ...

  2. (3)TXT转为XML

    <?xml version="1.0" encoding="utf-8"?> <bocb2e> <head /> <t ...

  3. Java基础——关键字

    volatile 用volatile修饰的变量,线程在每次使用变量的时候,都会读取变量修改后的最的值.volatile很容易被误用,用来进行原子性操作. 对于volatile修饰的变量,jvm虚拟机只 ...

  4. WindowManager.LayoutParams.type属性

    type 的取值: 应用程序窗口.      public static final int FIRST_APPLICATION_WINDOW = 1; 所有程序窗口的“基地”窗口,其他应用程序窗口都 ...

  5. 数据库MySQL-Oracle-DB2-SQLServer分页查询

    1. MySQL分页查询 (1)关键字: LIMIT beginIndex, maxRow (2)示例: LIMIT子句可以用来限制由SELECT语句返回过来的数据数量,它有一个或两个参数. 如果给出 ...

  6. JAVA使用apache http组件发送POST请求

    在上一篇文章中,使用了JDK中原始的HttpURLConnection向指定URL发送POST请求 可以看到编码量有些大,并且使用了输入输出流 传递的参数还是用“name=XXX”这种硬编的字符串进行 ...

  7. bzoj1876: [SDOI2009]SuperGCD

    更相减损数. 上手就debug了3个小时,直接给我看哭了. 3个函数都写错了是什么感受? 乘2函数要从前往后乘,这样后面的数乘2进位以后不会干扰前面的数. 除2函数要从后往前除,这样前面的数借来的位不 ...

  8. bzoj2431: [HAOI2009]逆序对数列

    dp. f[i][j]表示放置第i个数有j个逆序对的方案数. s[i][j]维护前缀和(f[i][0]~f[i][j]). 状态转移方程 f[i][j]=s[i-1][j]-s[i-1][max(j- ...

  9. bzoj3261: 最大异或和

    可持久化trie.又是%%%Xs酱... #include<cstdio> #include<cstring> #include<iostream> #includ ...

  10. jQuery Ajax通用js封装

    第一步:引入jQuery库 <script type="text/javascript" src="<%=path%>/resources/js/jqu ...