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 = 1
和 b = 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.
我为 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 = 1
和 b = 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.