我可以在父空间中的函数中引用函数吗?

Can I reference a function within a function that is in parent space?

本文关键字:函数 引用 空间 我可以      更新时间:2023-09-26

我的函数没有按照预期的方式运行,我正试图确定是否因为我对作用域有误解。

下面的函数搜索一个名为dataLayer的数组,看看是否有任何对象具有与字符串匹配的eventAction属性。

这个想法是,如果我找不到一个匹配的值,然后将一个值推入dataLayer数组,否则什么都不做。

我有一个引用另一个函数的函数。getNegativeErrs()参考getByValue() .

让它工作的合适方法是什么?如何使getByValue()对其他功能可用?

代码:

  var errors = [
    'Your password must be at least 6 characters long.',
    'Please enter a valid email address.'
  ];
  getNegativeErrs(errors);
  function getNegativeErrs(ers) {
    for( i in errors ) {
      var errobj = getByValue(dataLayer, errors[i]); //updated based on comments
      if(!errobj) { // if errobj is undefined continue. errobj is undefined when it should have a value so getByValue() not working as expected
        dataLayer.push({
          'event': 'negative_errors',
          'unseen': errors[i]
        })
      }
    }
  }
  function getByValue(arr, value) {
    for (var j=0, jLen=arr.length; j<jLen; j++) {
      if (arr[j].eventAction == value) return arr[j];
    }
  }

getByValue的第二个参数应该是字符串还是整数?当前它是一个整数,它是您循环遍历的errors数组的索引。你的循环像这样调用getByValue:

getByValue(dataLayer, 0)
getByValue(dataLayer, 1)

如果您想传递值而不是索引,则将getByValue(dataLayer, i)更改为getByValue(dataLayer, errors[i])

如果这是你的代码范围,getByValue()是在全局作用域中,应该是可访问的。

如果是这样,看起来这可能无法工作,因为没有定义dataLayers

http://jsbin.com/bivepitafe/

另外,请注意getNegativeErrors()没有使用传递给它的ers参数,而是使用全局作用域中的errors变量。

function getNegativeErrs(ers) {
     for( i in errors ) {

函数getnegativeerrors有问题,您没有使用传递给它的参数。它应该是这样的

function getNegativeErrs(ers) {
      for( i in ers ) {
  var errobj = getByValue(dataLayer, ers[i]); //updated based on comments
  if(!errobj) { // if errobj is undefined continue. errobj is undefined when it should have a value so getByValue() not working as expected
    dataLayer.push({
      'event': 'negative_errors',
      'unseen': ers[i]
    });
   }
  }
 }

此外,您正在检查dataLayer数组中是否存在与键eventAction匹配的错误,但随后在上述函数中,您正在添加键event…任何一个都可以,你只需要使它们相同。但我不认为这是一个范围问题。如果您想完全排除这种情况,只需将getByValue函数剪切并粘贴到getNegativeErrs函数上方即可。