最近开始总结之前的面试题,通过查阅借鉴了一些资料得出答案,整理的可能比较乱,但是自己看就还好
一、解释什么是闭包
1、定义: 闭包是指有权访问另一个函数作用域中的局部变量或方法的函数。声明在一个函数中的函数,就叫闭包。
2、特点:
(1)内部函数可以访问其所在的外部函数中声明的参数和变量
(2)变量不会被垃圾回收机制回收
(3)可避免使用全局变量,防止全局变量污染
(4)容易造成内存泄漏
函数作为返回值或者作为参数传递的时候都可以使用闭包
二、写出fn函数使得fn(1)(2)(3)=6,fn(1)(2)(3)(4)=10
此题考的是函数柯里化,柯里化就是一种将使用多个参数的一个函数转换成一系列使用一个参数的函数的技术。需要依赖参数以及递归,通过拆分参数的方式,来调用一个多参数的函数方法,以达到减少代码冗余,增加可读性的目的。以下是我给出的答案:
function fn(x) {
var sum = 0;
sum = sum + x;
return function fn2(y) {
if (arguments.length === 0) {
return sum
} else {
sum = sum + y;
return fn2;
}
}
}
console.log