javascript - 无法在尝试的验证函数中访问 javascript 父函数 - 可能需要关闭

标签 javascript scope closures

我正在尝试编写一个简单的函数来验证输入,但我在访问父对象函数时遇到问题。

认为问题是我需要一个闭包,但由于我对 js 很陌生,而且我很难理解闭包,我想也许会在我的代码中看到它的作用如果确实是问题所在,可能会有所帮助。

function validate(value, validator){

  if(validator == 'login_cred'){
    testName(value);
  }

  var test = {
    minLength: function (val, length) {
      return val.length >= length;
    }
  }

  function testName(value){
    if(!test.minLength(value, 5)){
      console.log('more chars please...');      
    }      
  }

}

//call
validate("str", 'login_cred');

当我调用该函数时,出现测试未定义错误。

这是需要闭包的情况吗?...如果是这样,闭包在上面的代码中如何最好地工作?

最佳答案

函数 testName 被提升。因此,您的代码实际上看起来像这样。

function validate(value, validator){

  function testName(value){
    if(!test.minLength(value, 5)){
      console.log('more chars please...');      
    }      
  }

  if(validator == 'login_cred'){
    testName(value);
  }

  var test = {
    minLength: function (val, length) {
      return val.length >= length;
    }
  }

}

//call
validate("str", 'login_cred');

如您所见,测试在调用时尚未声明,简单地将 testName 放在底部不会改变这一点。只需将您的代码更改为此即可。

function validate(value, validator){

 var test = {
    minLength: function (val, length) {
      return val.length >= length;
    }
  }

  if(validator == 'login_cred'){
    testName(value);
  }

  function testName(value){
    if(!test.minLength(value, 5)){
      console.log('more chars please...');      
    }      
  }

}

//call
validate("str", 'login_cred');

关于javascript - 无法在尝试的验证函数中访问 javascript 父函数 - 可能需要关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13126890/

相关文章:

java - 为什么我们要在 spring 中使用自定义作用域?什么时候需要?

javascript - JS变量作用域问题

performance - Javascript 模块函数与全局函数性能

c++ - 是否可以通过 V8 插件读取函数闭包?

javascript - jQuery DataTable 不是函数

javascript - Cordova Angular Android后退按钮不会触发ng-if

javascript - 如何向函数回调添加额外参数

matlab - 使用 matlabs 保存函数

Javascript/Node - 使用 for 循环将对象插入数组

javascript - 为什么 Javascript 闭包被称为安全的