分享一道我认为非常有思考价值JavaScript题目
这是一道综合性的题目,如果你能快速清晰的分析整理出来,那我相信你对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题目的更多相关文章
- 看看国外的javascript题目,你能全部做对吗?(分享)
本文转自@Aaron的博客,拿过来分享一下.原文:看看国外的javascript题目,你能全部做对吗? 题目一: (function(){ return typeof arguments; })(); ...
- 【腾讯Bugly干货分享】微信小程序开发思考总结——腾讯“信用卡还款”项目实践
本文来自于腾讯bugly开发者社区,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/58212d0fa7a7574c4f4cc3c5 作者:peggy 小程序概述 1 ...
- (转)c++类的成员函数存储方式(是否属于类的对象)---一道面试题引发的思考
昨天去面试一家公司,面试题中有一个题,自己没弄清楚,先记录如下: class D { public: void printA() { cout<<"printA"< ...
- 一道面试题引发的思考(C#值类型和引用类型)
某年某月,笔者去面试招行的一个外包项目,辗转来到面试地点以后,面试官给了我一份试卷,试卷只有两道题目,其中一道是这样的: 阅读以下程序 class Program { struct Point { p ...
- 阿里NLP总监分享-NLP技术的应用与思考
https://yq.aliyun.com/articles/78031 NLP技术的应用及思考
- 分享一道JS前端闭包面试题
输出以下代码的结果 function fun(n,o){ console.log(o); return { fun:function(m){ return fun(m,n);//[1] } } } v ...
- 一道CTF题引发的思考——SSI注入
题目地址:http://210.32.4.22/index.php 一开始我一直考虑的用<!--#include file="文件"-->的格式进行读取文件,但是一直不 ...
- 关于一道JS面试题的思考
题目: ; i < ; i++) { setTimeout(function() { console.log(new Date, i); }, ); } console.log(new Date ...
- 分享一道阿里巴巴(蚂蚁金服)Java笔试题
编写一个函数验证一个给定的9x9 整数矩阵是否符合数独的特性:a) 每个单元格数字为 1-9b) 每行的9个数不重复c) 每列的9个数不重复d) 如图中分割的9个小3x3矩阵,每个小矩阵里9个数不重复 ...
随机推荐
- Hibernate检索方式 分类: SSH框架 2015-07-10 22:10 4人阅读 评论(0) 收藏
我们在项目应用中对数据进行最多的操作就是查询,数据的查询在所有ORM框架中也占有极其重要的地位.那么,如何利用Hibernate查询数据呢?Hibernate为我们提供了多种数据查询的方式,又称为Hi ...
- distinct用法
distinct可以列出不重复的记录,对于单个字段来说distinct使用比较简单,但是对于多个字段来说,distinct使用起来会使人发狂.而且貌似也没有见到微软对distinct使用多字段的任何说 ...
- ubuntu10.04开启root登陆
半年没有用ubuntu了,以前用的是8.10,现在装了一个10.04,第一印象就是登陆窗口变了,哎,比较喜欢用root用户登录系统,不喜欢非root用户,做任何事都要来一下sudo,10.04的登陆窗 ...
- Miller-Rabin素数测试学习小计
1.Miller-Rabin是干啥的?它是用来检测一个数字(一般是很大的数字)是不是素数: 2.Miller-Rabin算法基于的两个定理: (1)费尔马小定理:如果p是一个素数,且0<a< ...
- 对github中项目进行更新
进入本地仓库文件夹,我的仓库名是tufujiegit,然后 进入 git clone 接着将先前记录下来的地址复制到后面,回车 将下载github中该仓库的所有文件及文件夹,包括.git文件夹在内 ...
- ios 开发中 developer tools access 总是要输入密码问题的解决
我一直没有想法去解决这个问题:打开iphone模拟器的时候,老是弹出developer tools access 让我输入密码, 今天我在打开模拟器的时候又弹出这个对话框,我愤怒了,于是我在网上查了一 ...
- Base64 Encoding / Decoding in Node.js
Posted on April 20th, 2012 under Node.js Tags: ASCII, Buffer, Encoding, node.js, UTF So how do you e ...
- uva 111 - History Grading (dp, LCS)
题目链接 题意:给N,第二行是答案,n个数c1---cn, 代表第一个的顺序是c1,第二个数顺序是c2; 下面每一行是学生的答案,格式同上. 注意:这个给的顺序需要处理一下,不能直接用. 思路:LCS ...
- LeetCode Swap Nodes in Pairs 交换结点对(单链表)
题意:给一个单链表,将其每两个结点交换,只改尾指针,不改元素值. 思路:迭代法和递归法都容易写,就写个递归的了. 4ms /** * Definition for singly-linked list ...
- 【转】linux下a.out >outfile 2>&1重定向问题
原文网址:http://blog.chinaunix.net/uid-25909722-id-2912890.html 转自:http://blog.chinaunix.net/space.php?u ...