javascript中的return语句不会退出函数?

时间:2015-05-12 18:02:26

标签: javascript function methods

我为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

2 个答案:

答案 0 :(得分:2)

你有一个嵌套的功能。前两个返回将退出内部函数,而最后一个将退出外部函数。

修改

您可以将函数返回视为使用返回值“替换”函数。例如:

var i = getSum(1, 3);

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

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

如果您还有其他问题,请与我们联系!

答案 1 :(得分:1)

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

函数arr.sort([compareFunction])将函数作为参数。

  

的compareFunction       可选的。指定定义排序顺序的函数。       如果省略,则根据每个字符的Unicode代码点值对数组进行排序,       根据每个元素的字符串转换。

  • 你在compareFunction内写的逻辑会被执行 java脚本引擎尝试比较它的两个元素 比较操作。
  • 因此,对于它所做的每次比较,函数都会返回一个 价值,根据这些价值订购。
  • 这意味着我们传递的return objArr;作为参数 将用于获取基于两个元素可以的值 进行比较并不退出排序操作,单独退出 外部功能。

话虽如此,代码public function add(PostFormRequest $request) { if (Input::get('title')) { $post = new Post(Input::all()); if ($post->save()) { return redirect('posts'); } } return view('add_post'); } 不起作用,因为数组将被排序in place