Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Синтаксис оператора return (https://javascript.ru/forum/angular/63087-sintaksis-operatora-return.html)

Acar 17.05.2016 04:43

Синтаксис оператора return
 
Не могу понять, почему в операторе return через запятую перечисляются переменные.
Разве так можно через запятую перечислять?

function clOpinions() {
        var product = {
            restrict: "AEC",
            scope: {
                id: "=",
                opinions: "="
            },
            controller: clOpinionsCtrl,
        };
        return clOpinionsCtrl.$inject = ["$scope"], product
    }

Rise 17.05.2016 05:37

Acar, так можно, а вот так нельзя
function clOpinions() {
        var product = {
            restrict: "AEC",
            scope: {
                id: "=",
                opinions: "="
            },
*!*
            controller: clOpinionsCtrl,
*/!*
        };
        return clOpinionsCtrl.$inject = ["$scope"], product
    }

Acar 17.05.2016 06:53

Цитата:

Сообщение от Rise (Сообщение 416781)
Acar, так можно, а вот так нельзя

Rise, что в таком случае будет возвращено функцией, то что представленно не одной, а несколькими переменными перечисленными в return через запятую?
Объект или массив..

Rise 17.05.2016 06:58

Acar, последнее значение, можно даже так
function clOpinions() {
    return clOpinionsCtrl.$inject = ["$scope"], {
        restrict: "AEC",
        scope: {
            id: "=",
            opinions: "="
        },
        controller: clOpinionsCtrl
    }
}

Acar 17.05.2016 07:30

Цитата:

Сообщение от Rise (Сообщение 416785)
Acar, последнее значение, можно даже так
function clOpinions() {
    return clOpinionsCtrl.$inject = ["$scope"], {
        restrict: "AEC",
        scope: {
            id: "=",
            opinions: "="
        },
        controller: clOpinionsCtrl
    }
}

Rise, так что это будет за тип (объект, массив) возвращаемого значения, состоящий из нескольких перечисленных через запятую сущностей в операторе return?
И каким образом затем обратиться, например, к последнему из них в предложенном вами варианте return, ведь у него Вы не оставили имени?

Safort 17.05.2016 07:37

Acar,
Цитата:

так что это будет за тип (объект, массив) возвращаемого значения, состоящий из нескольких перечислееных через запятую сущностей в операторе return?
Оператор запятая вернёт последнее перечисленное значение.

В общем, я просто оставлю это здесь
https://learn.javascript.ru/operator...82%D0%B0%D1%8F

https://habrahabr.ru/post/116827/

Rise 17.05.2016 07:46

Acar, тот же тип что и у последней возвращаемой сущности. Return завершает выполнение функции затем обратиться не куда не получится хоть с именем хоть без.

Acar 17.05.2016 08:17

Цитата:

Сообщение от Safort (Сообщение 416787)
Acar,

Оператор запятая вернёт последнее перечисленное значение.

Safort, так а какой смысл тогда в return перечислять что-либо через запятую, если все что до последней запятой все равно не возвращается функцией?
Как в моем примере, не возвращается clOpinionsCtrl
return clOpinionsCtrl.$inject = ["$scope"]

Rise 30.05.2016 13:20

Цитата:

Сообщение от Rise (Сообщение 416788)
Return завершает выполнение функции затем обратиться не куда не получится хоть с именем хоть без.

Но есть один момент, если return находится в блоках try, catch и обращение происходит в блоке finally, тогда получится с именем.
function clOpinions() {
	var product = {
		restrict: "AEC",
		scope: {
			id: "=",
			opinions: "="
		},
		controller: clOpinionsCtrl
	};
	try {
		// return product
	} catch (e) {
		// return product
	} finally {
		// обращение к product
	}
}
Плюс если в блоке finally производится не только чтение, но и запись в product, тогда в общем случае product дожен быть объектом (не примитив), чтобы вернулись свежие данные (чтобы return вернул ссылку на объект), если это необходимо.


Часовой пояс GMT +3, время: 08:05.