经常会看到这样关于函数的写法:
var cal = function(a) {
var plus = function() {
return a + 1;
}
return plus;
}
var fn = cal(3)();
我了解这个地方主要是使用了闭包。
但是一般像这种函数里面再返回函数的写法有什么用呢?或者说运用在哪些场景里面?
经常会看到这样关于函数的写法:
var cal = function(a) {
var plus = function() {
return a + 1;
}
return plus;
}
var fn = cal(3)();
我了解这个地方主要是使用了闭包。
但是一般像这种函数里面再返回函数的写法有什么用呢?或者说运用在哪些场景里面?
1、防止变量污染全局变量,在闭包里定义的变量,外部是不可以访问的,比如a
你可以在这里面任意使用,但是不影响在其他地方重新定义一个a
2、 高阶函数,应该说闭包只是高阶函数实现的时候出现的一个特征而已。
这样做的好处就是可以用函数生成函数。简单来说,比如有个加法的函数:
function add(a){
var adda = function(b){
return a+b;
}
return adda;
}
有了这样一个函数,当我们需要一个 +3
的函数的时候,就可以var add3 = add(3)
需要+4
的函数时候就可以var add4 = add(4)
;
好处就是,实现了一个稍微复杂一点儿的函数,就可以生产很多相对简单的函数,这样可以提高代码的复用。
13 回答13.1k 阅读
7 回答2.3k 阅读
3 回答1.4k 阅读✓ 已解决
3 回答2.8k 阅读✓ 已解决
6 回答1.5k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
3 回答1.5k 阅读✓ 已解决
像这种用法最大的用处是:“延迟一个函数的执行,让它仅在需要时才会执行,但其执行环境会被一直保留到执行时(闭包)”。
最常见的例子是在绑定事件的时候需要带上参数,一种方法是把参数定义为全局变量:
但这样做会严重污染全局变量,尤其是需要绑定的事件很多的时候。而且这种方法在通过代码动态绑定事件时也不方便。例如我想给2个对象绑定同一个事件,但是参数不一样,此时用上面的代码就不好处理了。
这时候就是高阶函数发挥用武之地的时候了:
当然,场景不局限于添加事件。只要是需要延迟执行一个函数,但又想让该函数记住执行环境,这时候就可以用到高阶函数。