Sorting Algorithms (bubble sort, merge sort)

What advanced optimization technique is implemented in this bubble sort variant?
function bubbleSortOptimized(arr) {
  let n = arr.length;
  for(let i = 0; i < n; i++) {
    let lastSwap = 0;
    for(let j = 0; j < n - i - 1; j++) {
      if(arr[j] > arr[j + 1]) {
        [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
        lastSwap = j;
      }
    }
    n = lastSwap + 1;
  }
  return arr;
}
Next Question (12/20)