Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Вызов функции, находящейся в другой функции (https://javascript.ru/forum/events/11453-vyzov-funkcii-nakhodyashhejjsya-v-drugojj-funkcii.html)

ZneP 24.08.2010 16:35

Вызов функции, находящейся в другой функции
 
Добрый день!

Есть такая функция:

function func1(p1, p2) {
   function func2() {alert(1);}
   func2();
}


Мне нужно вызвать func2 за пределами func1

Как это можно сделать?

Kolyaj 24.08.2010 16:43

Никак, очевидно.

Sweet 24.08.2010 17:14

Очевидно, нужно вызвать func1, потому что она ничего не делает, кроме вызова func2:D

MikhailGirshberg 24.08.2010 18:03

function func1(par1, par2){
function func2(){alert("hi, i'm fired from func2")}
this.f2name = func2;
this.v1=par1
this.v2=par2
}

var f1 = new f1(null, null)
f1.f2name()


в javascript function - это объект. Всё, что описано в функции через ключевое слово this - доступно (аналог public) извне по имени.

B@rmaley.e><e 24.08.2010 18:12

Цитата:

Сообщение от MikhailGirshberg
Всё, что описано в функции через ключевое слово this - доступно (аналог public) извне по имени.

А this (при вызове как функция, а не конструктор) = window. Вот и загрязняем глобальное пространство имен.

Kolyaj 24.08.2010 18:13

Цитата:

Сообщение от MikhailGirshberg
Всё, что описано в функции через ключевое слово this - доступно (аналог public) извне по имени.

Ну что за чушь.

subzey 24.08.2010 18:45

Можно использовать arguments.callee.
При этом весь scope func1 останется (см. значение переменной i)
function func1(){
var i = 3;
function func2(){alert("hi, i'm fired from func2\r\ni=" + i)}
arguments.callee.func2 = func2;
}
func1();
i = 42;
func1.func2();


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