Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Функция в функции (https://javascript.ru/forum/misc/42708-funkciya-v-funkcii.html)

Vladjiss 06.11.2013 16:34

Функция в функции
 
window.onload = function(){
var x = new func1('k')
здесь нужно вызвать функцию func2 () // появится сообщение alert('k')
}
function func1(e) {
	var Myvar = e;
	function func2 (){
		alert(Myvar)
	}
}

BETEPAH 06.11.2013 16:51

var x = new func1('k');
x.func2(); // появится сообщение alert('k')
var y = new func1('l');
y.func2(); // появится сообщение alert('l')

function func1(e) {
	return {
		func2 : function(){
			alert(e);
		}
	}
}

Vladjiss 06.11.2013 17:30

А если мне нужно функцию func2() вызвать внутри функции func1(), а так она не вызывается.
Пробовал так - не работает

var x = new func1('k');
//x.func2(); 

 
function func1(e) {
	function func2(){
            alert(e);
    } 
	
    return {
        func2 : func2()
        }
}

Faab 06.11.2013 17:39

Объясните мне кто нибудь что значит приведённая строка внизу, учитывая что func2() это alert(e)
return { func2 : func2() }

Vladjiss 06.11.2013 17:39

Кажется разобрался:
var x = new func1('k');
//x.func2();

function func1(e) {
    function func2(){
            alert(e);
    }
    return {
        func2 : func2
    }
}

Faab 06.11.2013 17:43

Хорошо, что значит тогда это:

return { func2 : func2 }


Какого результата вы добиваетесь этим? Я реально не в теме.

Vladjiss 06.11.2013 17:47

с помощью функции x.func2(); я могу вызвать функцию func2();, находящуюся в функции func1(), независимо от её расположения.
Хотя я честно говоря сам не понимаю, как это работает: 'return { func2 : func2 }'

Vladjiss 06.11.2013 17:47

//(расположения x.func2();)

Faab 06.11.2013 17:51

Ну я понимаю, что вы просто экспериментируете. А если просто поставить return, вы вызвать внутреннюю функцию не сможете?

var x = new func1('k');
//x.func2();
//x.func3();
//x.func4();


function func1(e) {
    function func2(){
            alert("func2" + e);
    }
    function func3(){
            alert("func3" + e);
    }
    function func4(){
            alert("func4" +e);
    }
    return;
}

Vladjiss 06.11.2013 18:02

ну а если мне нужно, скажем, вызвать только одну из этих функций

BETEPAH 06.11.2013 18:03

Цитата:

Сообщение от Faab
если просто поставить return

А какой смысл ставить пустой ретурн в конце функции? Она и так закончится.
return { func2 : func2 } возвращает объект с функцией, к элементам которого можно обратиться извне.

Vladjiss 06.11.2013 18:04

var x = new func1('k');
x.func2();
x.func3();
x.func4();
 
 
function func1(e) {
    function func2(){
            alert("func2" + e);
    }
    function func3(){
            alert("func3" + e);
    }
    function func4(){
            alert("func4" +e);
    }
    return;
}

Vladjiss 06.11.2013 18:04

не работает

Faab 06.11.2013 18:08

Цитата:

Сообщение от BETEPAH (Сообщение 279854)
А какой смысл ставить пустой ретурн в конце функции? Она и так закончится.
return { func2 : func2 } возвращает объект с функцией, к элементам которого можно обратиться извне.

Если взять мой пример, что я привёл, то к функция можно обратиться из-вне, только если будет прописано return { func2 : func2, func3 : func3, func4 : func4 } ?

BETEPAH 06.11.2013 19:50

Faab,
да. Функция должна что-то возвращать, чтоб к этому можно было обратиться


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