Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   как вызвать функцию из функции (https://javascript.ru/forum/dom-window/50342-kak-vyzvat-funkciyu-iz-funkcii.html)

imedia 22.09.2014 19:12

как вызвать функцию из функции
 
есть функция
function inp(){
   function  inputupload () {
		alert('inputupload')		
}
}

как вызвать алерт в таком случае

skrudjmakdak 22.09.2014 20:36

либо внутри функции или необходимо вернуть функцию:
function inp(){
   function  inputupload () {
		alert('inputupload')		
}
inputupload ();
}
inp();


function inp(){
   return function  () {
		alert('inputupload')		
}
}
inp()()

imedia 22.09.2014 21:12

Дело в том что inp() я хочу запускать при загрузке документа но так чтобы inputupload() запускался только при обращении к ней, то есть чтобы Алерт выводился только когда я обращусь к inputupload() а не в момент загрузки документа я бы написал так но так не работает
function inp(){
   function  inputupload () {
        alert('inputupload')       
}
}
$(document).ready(function(){
Inp()
})
Inp().inputupload ()

imedia 22.09.2014 22:45

skrudjmakdak,
А скажите зачем двойные скобки во втором варианте

ksa 23.09.2014 09:27

Цитата:

Сообщение от imedia
скажите зачем двойные скобки во втором варианте

Для вызова функции, которую вернет функция...

kostyanet 23.09.2014 09:36

Верните объект и не парьтесь.

imedia 23.09.2014 14:23

kostyanet,
а как? приведите пример

imedia 23.09.2014 16:21

так как вернуть объект кто нибудь может подсказать?

imedia 23.09.2014 17:08

Почему я вижу только load в алерте?
inp = function (){
alert('load')
function alload(){
alert('return load')
}
}

myobj= new inp;
myobj.alload()

ksa 23.09.2014 21:03

Цитата:

Сообщение от imedia
Почему я вижу только load в алерте?

Потому как потом ошибка у тебя...

var inp = function (){
	alert('load');
	this.alload=function (){
		alert('return load');
	};
};

var myobj= new inp;
myobj.alload();

kostyanet 23.09.2014 21:09

Ну как возвращают обхекты? Ну так например

return {};

Ну явно же глюкавая логика. Не бывает таких задач как вы придумали. То есть надо раньше смотреть - откуда такая потребность вылезла.

skrudjmakdak 24.09.2014 12:46

<html><head><script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script>
function inp(){
   return function () {
        alert('inputupload')       
}
}
$(document).ready(function(){
inp();
})
var res = inp();res(); //<-- это тоже самое что и inp()();

</script>
</head>
<body></body></html>

skrudjmakdak 24.09.2014 13:03

почитайте про переменные, как они устроены.

вот смотрите:
var a = 1;//есть переменная а
console.log(a); //если вывести переменную в консоль, то там высветиться 1, думаю понятно почему.. переменная равна единице


var str = 'stroka';//переменная типа string, т.е. строка
console.log(str);//выведем в консоль, получим результат stroka


теперь возьмем массив:
var ar = [4, 7, 5];
console.log(ar[0]); //выведем 0-ой элемент массива, получим 4
console.log(ar); //выведем весь массив


возьмем функцию:
function fn() {
alert('fn!');
}

fn(); //вызовем ее. в алерт выпадет fn!
console.log(fn);//теперь выведем fn в консоль, ведь fn - это тоже переменная, как и a, str, ar. только она хранит не число, строку, массив а хранит она функцию


теперь возьмем еще одну функцию
function mfn(a){
console.log(a); //а равняется четырем, т.к. передали мы именно 4
return 5 + a; //функция может возвращать значения a + 5 (a равняется 4), то результат будет  9
}

var res = mfn(4);//в функцию мы передаем параметр 4. результат выполнения функции равен 9
console.log(res);



теперь возьмем еще одну функцию:
function ffn(){
//внутри функции ffn мы создаем еще одну функцию, назовем ее myfn
  function myfn(){
    alert(1);
  }
console.log(myfn); //попробуем вывести ...
return myfn;//а теперь отдадим результат. т.е. мы отдали переменную myfn, в которой хранится функция
}

var res = ffn(); //вызовем функцию ffn и результатом выполнения этой функции будет другая функция, а именно myfn. сохраним результат в переменную res
console.log(res); //выведем значение res
res(); //т.к. res это функция, то можем ее вызвать ..

kostyanet 26.09.2014 17:35

Задача была в точности наоборот, и где foo-bar-baz?


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