Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблемы вызова функции (https://javascript.ru/forum/misc/26622-problemy-vyzova-funkcii.html)

Harvey 15.03.2012 13:07

Проблемы вызова функции
 
Привет, друзья!

Проблема в следующем:
Не получается вызвать одну функцию(init()) в теле другой, пишет init is not defined, что, вероятно, указывает на недоступность в связи с областью видимости.

Функция init определена в такой области в файле a.js:

(function ($) {
 $( pieChart );

 function pieChart() {
   function init()
 }
  
})(jQuery)


и я хочу вызвать ее в другой функции другого файла(b.js) и в другой области видимости

Скажите пожалуйста, можно каким-либо образом вызвать функцию, указав соответствующую область видимости? В общем подскажите, как решить мою проблему. Спасибо!

Harvey 15.03.2012 14:15

Да, понятно, что так некрасиво.
Нашел все таки другой выход - объединил 2 файла)

На самом деле думал, что есть метод, с помощью которого можно вызвать функцию из под нужной области видимости

Спасибо

cyklop_77 27.12.2013 16:51

у меня аналогичная проблема, может мне ответит кто?

есть примерно такой код:
function a(){
	var	rrr = 8;
	function aim(arg){
		console.log('aim' + arg);
		console.log(rrr);
	}
};

function b(){
	a.aim('this is argument');
};


вызов a.aim('this is argument'); не работает, консоль выводит сообщение
Цитата:

Uncaught ReferenceError: a is not defined
пробовал вызывать через apply. тоже безуспешно

Shelimov 28.12.2013 12:48

cyklop_77, консоль все правильно говорит. Вложенная функция не становится свойством функции, внутри которой она определена.

Чтобы ваш код работал надо сделать так:
function a(){
	var	rrr = 8;
	this.aim = function(arg){
		console.log('aim' + arg);
		console.log(rrr);
	}
};

function b(){
	new a().aim('this is argument');
};


Или так:
var a = (function(){
	var	rrr = 8;
	return {
        aim: function(arg) {
            console.log('aim' + arg);
            console.log(rrr);
        }
	}
})();

function b(){
	a.aim('this is argument');
};

cyklop_77 29.12.2013 13:48

спасибо


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