Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查是否使用了参数_Javascript_Jquery_Function - Fatal编程技术网

Javascript 检查是否使用了参数

Javascript 检查是否使用了参数,javascript,jquery,function,Javascript,Jquery,Function,我想知道最好的方法是检查函数中是否已经调用了参数 我想做什么的Sudo代码: function returnArg(arg){ if(argHasbeenCalled){ return "foo"; } else{ return arg; } } 我的解决办法是: var myArray = []; function returnFoo(arg){ if(jQuery.inArray(arg, myArray) < 1){ re

我想知道最好的方法是检查函数中是否已经调用了参数

我想做什么的Sudo代码:

function returnArg(arg){
 if(argHasbeenCalled){
   return "foo";
  }   
  else{
    return arg;
  }
}
我的解决办法是:

var myArray = [];
function returnFoo(arg){

    if(jQuery.inArray(arg, myArray) < 1){
        return "Foo";
    }   
    else {
        return "bar";
    }
    newArray.push(arg);
}

我想你想要的是什么。如果你只是想知道这个参数是否被处理过,这与你对结果不感兴趣并不完全一样,但是你可以使用类似的方法

var myFn = (function (processedArgs) {
    return function (arg) {
        if (processedArgs[arg]) {
            console.log('already processed');
            //do something
            return;
        }

        console.log('not processed');
        //do something
        processedArgs[arg] = true;
    };
})({});

myFn(1); //not processed
myFn(1); //already processed
但是,如果arg是一个对象,则必须使用该对象的某些属性来生成密钥。如果不可能,可以将它们存储在数组中,而不是使用对象作为映射,然后使用array.indexOfarg查看对象是否在数组中


你也可以用一个。不幸的是,浏览器仍然不支持,但前面链接的答案将向您展示如何自己实现一个浏览器。

我认为您想要的就是所谓的。如果你只是想知道这个参数是否被处理过,这与你对结果不感兴趣并不完全一样,但是你可以使用类似的方法

var myFn = (function (processedArgs) {
    return function (arg) {
        if (processedArgs[arg]) {
            console.log('already processed');
            //do something
            return;
        }

        console.log('not processed');
        //do something
        processedArgs[arg] = true;
    };
})({});

myFn(1); //not processed
myFn(1); //already processed
但是,如果arg是一个对象,则必须使用该对象的某些属性来生成密钥。如果不可能,可以将它们存储在数组中,而不是使用对象作为映射,然后使用array.indexOfarg查看对象是否在数组中


你也可以用一个。不幸的是,浏览器仍然不支持,但是前面链接的答案将向您展示如何自己实现一个。在将参数存储到数组中之前,您的代码将返回

除非点击else分支,否则不需要将参数存储在数组中。因此,考虑这样的事情:

var myArray = [];
function returnFoo(arg)
{
  if (jQuery.inArray(arg, myArray) === -1)
  {
    return "Foo";
  }   
  else
  {
    myArray.push(arg);
    return "bar";
  }
}

在将参数存储到数组中之前,代码将返回

除非点击else分支,否则不需要将参数存储在数组中。因此,考虑这样的事情:

var myArray = [];
function returnFoo(arg)
{
  if (jQuery.inArray(arg, myArray) === -1)
  {
    return "Foo";
  }   
  else
  {
    myArray.push(arg);
    return "bar";
  }
}

一个简单的解决办法是:

// generic helper function
function rememberCalls(fn) {
  var calledArgs = {};
  return function(arg) {
    if (!(arg in calledArgs)) {
      calledArgs[arg] = fn(arg);
    }
    return calledArgs[arg];
  }
}

// example
var addQuestionMark = rememberCalls(function(str) {
  return str + '?';
});

addQuestionMark('What is your name'); // the function will be called
addQuestionMark('What is your name'); // the function will be skipped

一个简单的解决办法是:

// generic helper function
function rememberCalls(fn) {
  var calledArgs = {};
  return function(arg) {
    if (!(arg in calledArgs)) {
      calledArgs[arg] = fn(arg);
    }
    return calledArgs[arg];
  }
}

// example
var addQuestionMark = rememberCalls(function(str) {
  return str + '?';
});

addQuestionMark('What is your name'); // the function will be called
addQuestionMark('What is your name'); // the function will be skipped

只是一个关于检查是否调用了参数的最佳方法是什么的问题。当函数已经处理了该参数时,您想做什么?我正在绘制一个rapheal.js元素,如果它已被移动,我想这是另一个线程的克隆。实际上,我只是想让else语句起作用。只是想问一下,检查是否调用了参数的最佳方法是什么。当函数已经处理了该参数时,您想做什么?我正在绘制一个rapheal.js元素,如果它已被移动,我想这是用于另一个线程的。真的,我只希望else语句起作用。大小写应该是$.inArray…==-1.0是数组中的第一个元素。是的,没错。我没有看他的支票。现在已编辑。案例应为$.inArray…==-1.0是数组中的第一个元素。是的,没错。我没有看他的支票。现在编辑。谢谢Plalx。我没听说过背诵,这看起来是个很好的解决办法。谢谢你。我没听说过背诵,这看起来是个很好的解决办法。