分享一道我认为非常有思考价值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个数不重复 ...
随机推荐
- c# FastReport开发报表
本文介绍c#应用FastReport开发报表,因此首先附该工具下载地址:http://download.csdn.net/detail/hws1058648831a/6378499 下载解压后可以直接 ...
- RecyclerView(4)简单示例
1,RecyclerViewFrgmt import com.example.adapter.R; import android.app.Fragment; import android.os.Bun ...
- 自定义View(1)简单流程及示例模板
1,继承View , ViewGroup,或TextView等等 2,绘制相关的api, canvas 画布, paint 画笔 2,重写重要的函数(注意这个顺序) onMeasure 属于View的 ...
- Ext2.0之Tabpanel AJAX远程加载多标签页面模式开发技巧
目前开发的方式是采用远程load页面来实现多页面效果,类似于126邮箱多标签页效果.但是比126邮箱的方式更好,因为页面打开后是load到本地的,126似乎还会重新请求.在近期项目该开发方式已经基本成 ...
- Android Handler 避免内存泄漏的用法总结
Android开发经常会用到handler,但是我们发现每次使用Handler都会出现:This Handler class should be static or leaks might occur ...
- jquery select操作和联动操作
(function(){ //select操作 $.fn.loadSelect = function(opt){ opt = $.extend({}, { required:false,//为真则添加 ...
- tranform-scale 缩小元素,移上去文字抖动
元素缩小后,鼠标移上去之后文字会出现抖动, -webkit-transform:scale(0.5); 修复代码如下: *{ -webkit-backface-visibility: hidden; ...
- 真心崩溃了,oracle安装完成后居然没有tnsnames.ora和listener.ora文件
problem: oracle 11 r2 64位安装完成后NETWORK/ADMIN目录下居然没有tnsnames.ora和listener.ora文件 solution: 问题是之前安装了另 ...
- EASYUI+MVC4通用权限管理平台
通用权限案例平台在经过几年的实际项目使用,并取得了不错的用户好评.在平台开发完成后,特抽空总结一下平台知识,请各位在以后的时间里,关注博客的更新. 1.EASYUI+MVC4通用权限管理平台--前言 ...
- Asp.Net时间戳与时间互转
/// <summary> /// 时间戳转成时间类型 /// </summary> /// <param name="timeStamp">& ...