JavaScript---函数问题
来源:互联网 发布:ipad怎么管理淘宝店铺 编辑:程序博客网 时间:2024/05/24 04:10
JavaScript—函数问题
一些简单的涉及JavaScript函数的问题测验
函数传参
将数组 arr 中的元素作为调用函数 fn 的参数
输入例子:
argsAsArray(function (greeting, name, punctuation) {return greeting + ‘, ’ + name + (punctuation || ‘!’);}, [‘Hello’, ‘Ellie’, ‘!’])
输出例子:
Hello, Ellie!
function argsAsArray(fn,arr) { return fn.apply(this,arr);}
函数的上下文
将函数 fn 的执行上下文改为 obj 对象
输入例子:
speak(function () {return this.greeting + ‘, ’ + this.name + ‘!!!’;}, {greeting: ‘Hello’, name: ‘Rebecca’})
输出例子:
Hello, Rebecca!!!
function speak(fn, obj) { return fn.apply(obj,obj)}/*在JavaScript中,函数是一种对象,其上下文是可以变化的,对应的,函数内的this也是可以变化的,函数可以作为一个对象的方法,也可以同时作为另一个对象的方法,可以通过Function对象中的call或者apply方法来修改函数的上下文,函数中的this指针将被替换为call或者apply的第一个参数。将函数 fn 的执行上下文改为 obj 对象,只需要将obj作为call或者apply的第一个参数传入即可。*/
返回函数
实现函数 functionFunction,调用之后满足如下条件:
1、返回值为一个函数 f
2、调用返回的函数 f,返回值为按照调用顺序的参数拼接,拼接字符为英文逗号加一个空格,即 ‘, ’
3、所有函数的参数数量为 1,且均为 String 类型
输入例子:
functionFunction(‘Hello’)(‘world’)
输出例子:
Hello, world
function functionFunction(str) { var ret = Array.prototype.slice.call(arguments).join(', '); console.log(ret); var temp = function(str1) { ret = [ret, Array.prototype.slice.call(arguments).join(', ')].join(', '); return ret; }; return temp;}functionFunction('Hello')('World');
使用闭包
实现函数 makeClosures,调用之后满足如下条件:
1、返回一个函数数组 result,长度与 arr 相同
2、运行 result 中第 i 个函数,即 resulti,结果与 fn(arr[i]) 相同
输入例子:
var arr = [1, 2, 3];
var square = function (x) {
return x * x;
};
var funcs = makeClosures(arr, square);
funcs1;
输出例子:
4
function makeClosures(arr, fn) { var result=[]; for(var i=0;i<arr.length;i++){ result.push(function(num){ return function(){ return fn(num);} }(arr[i])); } return result;}
二次封装函数
已知函数 fn 执行需要 3 个参数。请实现函数 partial,调用之后满足如下条件:
1、返回一个函数 result,该函数接受一个参数
2、执行 result(str3) ,返回的结果与 fn(str1, str2, str3) 一致
输入例子:
var sayIt = function(greeting, name, punctuation) { return greeting + ‘, ’ + name + (punctuation || ‘!’); }; partial(sayIt, ‘Hello’, ‘Ellie’)(‘!!!’);
输出例子:
Hello, Ellie!!!
function partial(fn, str1, str2) { var result=function(str3){ return fn(str1,str2,str3); } return result;}
使用 arguments
函数 useArguments 可以接收 1 个及以上的参数。请实现函数 useArguments,返回所有调用参数相加后的结果。本题的测试参数全部为 Number 类型,不需考虑参数转换。
输入例子:
useArguments(1, 2, 3, 4)
输出例子:
10
function useArguments() { return Array.prototype.slice.call(arguments).reduce(function(a,b){return a+b;});}
使用 apply调用函数
实现函数 callIt,调用之后满足如下条件
1、返回的结果为调用 fn 之后的结果
2、fn 的调用参数为 callIt 的第一个参数之后的全部参数
输入例子:
var a = 1; var b = 2; var test = function (first, second) { return first === a && second === b;}; callIt(test, a, b);
输出例子:
true
function callIt(fn) { var arg=Array.prototype.slice.call(arguments,1); return fn.apply(this,arg);}
二次封装函数
实现函数 partialUsingArguments,调用之后满足如下条件:
1、返回一个函数 result
2、调用 result 之后,返回的结果与调用函数 fn 的结果一致
3、fn 的调用参数为 partialUsingArguments 的第一个参数之后的全部参数以及 result 的调用参数
输入例子:
var a = 1; var b = 2; var c = 3; var d = 4;var test = function (first, second, third, forth) {return first + second + third + forth;};partialUsingArguments(test, a, b)(c, d);
输出例子:
10
function partialUsingArguments(fn) { var argu1=[]; argu1=Array.prototype.slice.call(arguments,1); function result(){ var argu=[]; argu=Array.prototype.slice.call(arguments); var res=argu1+','+argu; console.log(res); return fn.apply(this,argu1.concat(argu)); } return result;}var a = 1; var b = 2; var c = 3; var d = 4;var test = function (first, second, third, forth) {return first + second + third + forth;};partialUsingArguments(test, a, b)(c, d);
柯里化
已知 fn 为一个预定义函数,实现函数 curryIt,调用之后满足如下条件:
1、返回一个函数 a,a 的 length 属性值为 1(即显式声明 a 接收一个参数)
2、调用 a 之后,返回一个函数 b, b 的 length 属性值为 1
3、调用 b 之后,返回一个函数 c, c 的 length 属性值为 1
4、调用 c 之后,返回的结果与调用 fn 的返回值一致
5、fn 的参数依次为函数 a, b, c 的调用参数
输入例子:
var fn = function (a, b, c) {return a + b + c}; curryIt(fn)(1)(2)(3);
输出例子:
6
function curryIt(fn) { var args = []; var len = fn.length; return function (arg) { args.push(arg); if (args.length < len) { return arguments.callee; } else { return fn.apply(this,args); } }}
- javascript定义函数问题
- JavaScript---函数问题
- [ javascript ] javascript自启动函数的问题
- javascript函数的参数问题
- JavaScript中parseInt()函数问题
- JavaScript中parseInt()函数问题
- JavaScript中parseInt()函数问题
- 谈谈javascript 中的函数问题
- JavaScript函数同名覆盖问题
- JavaScript中的递归函数问题
- JavaScript-js中函数问题
- 关于JavaScript的函数问题
- JavaScript函数调用返回问题
- JavaScript构造函数返回值问题
- JavaScript构造函数返回值问题
- JavaScript函数split中空格问题
- JavaScript 中函数定义的差异问题
- javascript函数参数的传递问题
- 项目记录-圆形边缘修正方法探索2
- vlc hotkey(热键)处理过程
- Mathematica 技术领域1
- 基于 Django1.10 文档的深入学习(9)—— Extra instance methods 之 get_FOO_display()
- 初窥PSO粒子群算法
- JavaScript---函数问题
- 量化浅谈——读懂自己,然后才能写出量化
- 死变态的跳台阶——爬楼梯进阶版本
- 第五单元
- 二值网络——开启小而快神经网络时代
- Spring@Autowired注解与自动装配
- 最小生成树kruskal算法适合稀疏图(网络整理)8.1.3
- html --CSS的盒子模型
- 常量整理