介绍一下bind方法实现,源于MDN中的bind

 
介绍下栈溢出
function sum(x, y) {
     if  (y > 0) {
         return  sum(x + 1, y - 1);
     else  {
         return  x;
     }
}
 
sum(1, 100000000000)
 
这个时候会出现一个堆栈溢出的错误,在es6里面,有一个为递归优化的方法可以解决,即在最后一步调用函数,且实现函数的柯里化(多参函数转换成单参数函数),但是需要开启严哥模式,普通模式下会报错,这个时候我再阮大神的es6书籍里面,看到了蹦床函数,结合.bind,使函数调用的时候是自己的方法,但是确是另一个函数对象,不是本身,这个时候就不会造成内存的泄露,发生堆栈溢出了,实现代码如下:
 
function trampoline(f) {
   while  (f && f instanceof Function) {
     f = f();
   }
   return  f;
}
 
 
function sum(x, y) {
   if  (y > 0) {
     return  sum.bind( null , x + 1, y - 1);
   else  {
     return  x;
   }
}
 
trampoline(sum(1, 100000))

你可能感兴趣的:(介绍一下bind方法实现,源于MDN中的bind)