如何在函数内部调用自身函数

10

我有一个函数,我想在最后一行完成后再次调用。

如果我展示代码可能更容易理解。

function updateQuantity(){ 
    // further code where I change same data
    // and now I want to start function again but with remembering the input element that called it previously 
    updateQuantity(this);  // I tried it this way but it doesn't work
}

有什么想法吗?

那个有什么问题呢?那是一个经典的递归案例(除非你需要一个终止条件)。你是想在再次调用时拥有相同的“this”值吗? - Mike Cluck
@MikeC 也许OP试图保留在上一次运行updateQuantity时设置的变量? - Andreas Louv
我想让函数记住我要在此函数中使用的输入元素。 - cyprian
4个回答

8
答案很简单,只需要在updateQuantity函数内使用 updateQuantity.call(this) 即可——当我们使用call并添加this时,函数将重新开始,并记住之前调用updateQuantity的输入元素。

4

从你的问题评论中可以看出,你想将一个值传递给你的递归方法调用。

function updateQuantity(val){
  // Do something with `val`
  val = val + 1;

  console.log(val);

  // And call it again with the value
  if(val < 5){
    updateQuantity(val);
  }
}

updateQuantity(1); // 2, 3, 4, 5

不是返回值,而是我想要之前调用此函数的输入元素,因为在函数内部我想要使用这个输入元素。 - cyprian
你的意思是保留原始参数值?那么,就不要更改它,并将其原样传递。从上面的代码中删除 val = val + 1; - Uzbekjon

0

看起来你正在尝试在函数体中获取DOM元素。

这是一个简单的例子:https://jsfiddle.net/c3kbu0j7/10/

HTML

<a href="#">element you want.</a>

JavaScript

$('a').on('click',function(){
    a(this);
});
var i=0;
function a(tar){
  console.log(tar);
  if(i<4){
    i++;
    a(tar);
  }
  i=0;
}

0
你可以使用 requestAnimationFrame(),它会在每个帧中调用该函数。
HTML
<a href="#" id="link"></a>

JS

const link = document.getElementById("link");

function myFunc(value) {
      ///////////////////
     // do stuff here //
    ///////////////////
    
    // call the function again with the same parameter
    requestAnimationFrame(myFunc(value));
}

link.addEventListener("mousedown", function () {
    myFunc(link);
}, false);

或者,如果你想让函数只被调用两次:

HTML

<a href="#" id="link"></a>

JS

const link = document.getElementById("link");
let x = 0;

function myFunc(value) {
      ///////////////////
     // do stuff here //
    ///////////////////
    
    // call the function again but increase x so an infinite loop isn't created
    if (x < 1) {
        x++;
        myFunc(value);
    }
    else x = 0;
}

link.addEventListener("mousedown", function () {
    myFunc(link);
}, false);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接