30.01.2016, 12:50
|
Аспирант
|
|
Регистрация: 13.01.2016
Сообщений: 57
|
|
Надо вызывать функцию внутри другой функции
Доброго времени суток, как вызвать функцию
onDrop внутри init. Каким образом его можно изменить чтоб все работало?
Буду очень рад любой помощи
var init = function() {
var board,
game = new Chess();
var onDrop = function(source, target) {
var move = game.move({
from: source,
to: target,
promotion: 'q'
});
if (move === null) return 'snapback';
updateStatus();
};
var onSnapEnd = function() {
board.position(game.fen());
};
var cfg = {
position: 'start',
onDrop: onDrop,
onSnapEnd: onSnapEnd
};
$('#surrender').click(function(){
$('#surrender').hide();
});
};
Последний раз редактировалось diga, 30.01.2016 в 13:22.
|
|
30.01.2016, 14:09
|
|
Профессор
|
|
Регистрация: 18.05.2011
Сообщений: 1,207
|
|
может так?
<script>
var func1 = function(){
var func2 = function(){
alert('Hello from func2');
}
return func2;
}
var q = func1();
q();
</script>
|
|
30.01.2016, 14:39
|
Аспирант
|
|
Регистрация: 13.01.2016
Сообщений: 57
|
|
Сообщение от destus
|
может так?
|
в данном случае вызывается первая функция, внутри которой выполняется вторая, в моем случае надо вызвать именно вторую, нужно делать через объекты, но у меня не получается
|
|
30.01.2016, 15:28
|
|
Профессор
|
|
Регистрация: 15.07.2015
Сообщений: 511
|
|
Нужно вызвать функцию2, которая объявлена в функции1 - не вызывая функцию1?
Никак.
Нужно вызвать функцию2, которая объявлега в функции1.
var bar;
function foo() {
bar = function() {
alert('bar');
}
};
foo();
bar();
Последний раз редактировалось Lemme, 30.01.2016 в 15:32.
|
|
30.01.2016, 15:31
|
|
Профессор
|
|
Регистрация: 18.05.2011
Сообщений: 1,207
|
|
Сообщение от diga
|
в данном случае вызывается первая функция, внутри которой выполняется вторая, в моем случае надо вызвать именно вторую, нужно делать через объекты, но у меня не получается
|
Чтобы не выполнялся остальной код, а вызывалась именно вложенная функция, можно параметром передавать в первую функцию что именно надо.
<script>
var func1 = function(param){
var func2 = function(){
alert('Hello from func2');
}
switch (param)
{
case 'func2':
return func2();
break;
default: /* всё остальное */
alert('Hello from func1');
}
}
func1('func2');
</script>
|
|
30.01.2016, 15:44
|
Аспирант
|
|
Регистрация: 13.01.2016
Сообщений: 57
|
|
я хотел сделал таким образом:
function init() {
var board,
game = new Chess();
function onDrop(source, target) {
var move = game.move({
from: source,
to: target,
promotion: 'q'
});
if (move === null) return 'snapback';
};
onDrop.set = function(source, target) {
var move = game.move({
from: source,
to: target,
promotion: 'q'
});
if (move === null) return 'snapback';
};
var onSnapEnd = function() {
board.position(game.fen());
};
var cfg = {
draggable: true,
position: 'start',
onDrop: onDrop,
onSnapEnd: onSnapEnd
};
var board = ChessBoard('board', cfg);
}
т.е. добавил метод для функции, но когда вызываю я:
onDrop.set(параметры)
выдает ошибку:
Uncaught TypeError: Cannot read property 'set' of undefined
|
|
30.01.2016, 15:47
|
Аспирант
|
|
Регистрация: 13.01.2016
Сообщений: 57
|
|
Сообщение от Lemme
|
Нужно вызвать функцию2, которая объявлена в функции1 - не вызывая функцию1?
Никак.
Нужно вызвать функцию2, которая объявлега в функции1.
var bar;
function foo() {
bar = function() {
alert('bar');
}
};
foo();
bar();
|
т.е. мне надо глобально объявить переменную? в моем случае мне кажется это не очень корректно.
Попробовал выдает ошибку:
Uncaught TypeError: onDrop is not a function(…)
Я хочу добиться того, чтоб можно было ходить фигурами используя консоль, т.е. чтоб у меня была возможность набрать команду, и фигуры переместилась, мне для этого нужно вызвать ту самую функцию и передать определенные параметры
Последний раз редактировалось diga, 30.01.2016 в 15:57.
Причина: дополнил
|
|
30.01.2016, 16:06
|
|
Профессор
|
|
Регистрация: 18.05.2011
Сообщений: 1,207
|
|
Сообщение от diga
|
т.е. мне надо глобально объявить переменную? в моем случае мне кажется это не очень корректно.
Попробовал выдает ошибку:
Uncaught TypeError: onDrop is not a function(…)
|
В js используется лексическая область видимости. Это означает, что внутренняя функция определена как свойство обьекта вызова внешней. Нельзя вызвать внутренню функцию, не вызвав внешнюю, потому что обьект вызова внешней функции еще не создан.
|
|
30.01.2016, 16:12
|
Аспирант
|
|
Регистрация: 13.01.2016
Сообщений: 57
|
|
Сообщение от destus
|
В js используется лексическая область видимости. Это означает, что внутренняя функция определена как свойство обьекта вызова внешней. Нельзя вызвать внутренню функцию, не вызвав внешнюю, потому что обьект вызова внешней функции еще не создан.
|
код показывают расстановку шахматных фигур на доске, и если ход был сделан не правильно то фигура возвращается на свое исходное положение, я хотел добиться возможности сделать ход используя консоль, т.е. чтоб я мог вызвать функцию и передать ей нужные аргументы после чего моя фигура переместилась бы..
а за ход и перемещение отвечает та функция, которую я пытался вытащить, может есть какие нибудь методы реализовать это? или каким нибудь образом переделать функцию в объект?
|
|
30.01.2016, 16:51
|
|
Профессор
|
|
Регистрация: 15.07.2015
Сообщений: 511
|
|
Последний раз редактировалось Lemme, 30.01.2016 в 16:56.
|
|
|
|