Sure, here's an example of a tail-recursive function that uses memoization to efficiently calculate the nth Fibonacci number:

```
function fibonacci(n, memo = []) {
  if (memo[n] !== undefined) return memo[n]; // check if value already exists in memo
  if (n <= 1) return n;
  memo[n] = fibonacci(n - 1, memo) + fibonacci(n - 2, memo); // calculate and store result in memo
  return memo[n];
}

console.log(fibonacci(10)); // Output: 55
```

In this example, the function `fibonacci` takes an additional `memo` parameter that defaults to an empty array. This array serves as a cache to store previously calculated values of the Fibonacci sequence. 

The function first checks if the nth value has already been calculated and stored in the memo array. If so, it immediately returns that value, avoiding redundant calculations.

If the nth value is not in the memo array, the function calculates it by recursively calling itself with the previous two values and storing the result in the memo array. Finally, the function returns the calculated value.

Since this function uses tail recursion and memoization, it should have the same efficiency as an iterative solution for calculating Fibonacci numbers.
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence