Return javascript 中的语句没有退出函数?

Return statement in javascript doesn't exit the function?

我为 sort 对象写了一个简单的函数,不希望它起作用,但它起作用了:

function sortObjs(objArr,field) {
    objArr.sort(
        function(a,b) {
            if( isNaN(a[field]) ) {
                return a[field].localeCompare(b[field]);
            } else {
                return parseFloat(a[field]) - parseFloat(b[field])
            }
        }
    );

    return objArr;
}

当我调用这个函数时,我得到了我排序的对象而没有问题。但我没想到它会起作用,因为我认为前两个 return 语句会在函数到达最后一个语句之前退出该函数:return objArr.

你有一个嵌套函数。前两个returns会退出内层函数,最后一个会退出外层函数

编辑:

您可以将函数 returns 视为 "replacing" 具有返回值的函数。例如:

var i = getSum(1, 3);

function getSum(a, b) {
    return a + b;
}

函数getSum returns a 和b 的总和。 var i = getSum(1, 3) 行将执行包含在 a = 1b = 3 函数中的代码行。函数调用返回的值 "replaces"。所以现在这行代码看起来像 var i = 4;。虽然这不是确切地它是如何工作的,但这是将其概念化的好方法。这是一个特殊情况,因为您实际上 运行 不是此处的内部方法,而是将其作为变量传递。

如果您还有其他问题,请告诉我!

要理解为什么内部函数的 return 语句不会对外部作用域中的 return 语句产生影响,您需要了解 Array.prototype.sort() 函数的工作原理。

函数arr.sort([compareFunction]),接受一个函数作为参数。

compareFunction Optional. Specifies a function that defines the sort order. If omitted, the array is sorted according to each character's Unicode code point value, according to the string conversion of each element.

  • 您在 compareFunction 中编写的逻辑在以下情况下执行 java 脚本引擎尝试在其运行期间比较两个元素 比较运算。
  • 因此,对于它进行的每一次比较,该函数都会 return 值,将根据其对元素进行排序。
  • 这意味着我们作为参数传递的 compareFunction 将用于仅获取一个值,基于该值两个元素可以 比较和不退出排序操作,不用管退出了 外部函数。

话虽如此,代码 return objArr; 无效,因为数组将被排序 in place.