2017.4.10 js 中的function 实现的方式实例系列:JS 策略模式-------- 表单验证







  
  
  
  



 

改栗子的关键问题是闭包,以及变量的引用,以及函数的执行环境问题。
因为push的是函数,函数中有对变量strategyArr的引用,所以形成了闭包。

2 变量的引用

  如果变量的值是引用类型的地址。传递过程中的该变量就是引用传递。 所以本栗子中的strategyArr,是有i的数组

  var strategyArr = rules[i].strategy.split(":");
  var errorMsg = rules[i].errorMsg;      
  self.cache.push(function(){
     var strategy = strategyArr.shift();
     strategyArr.unshift(dom.value);
     strategyArr.push(errorMsg)
     return strategies[strategy].apply(dom,strategyArr);
  })

3 首先说下函数的执行环境问题。
    对于类似  someElement.onclick = function(){
            someFn();   //someFn(普通函数)的执行环境为window,someFn中的this指向window
          }

转载于:https://www.cnblogs.com/FineDay/articles/6688290.html

你可能感兴趣的:(2017.4.10 js 中的function 实现的方式实例系列:JS 策略模式-------- 表单验证)