Передайте переменную в settimeout ()

Я бы хотел это сделать:

var whatever = myfunction;
var time = 200;
setTimeout(whatever, time);

function myfunction() {
    //do something
}

Это не работает, я не уверен, почему

Лучший пример: Вот HTML HTML:

<div id="example1" class="example-card" style="visibility: hidden;"></div>
<div id="example2" class="example-card" style="visibility: hidden;"></div>

Вот JS JS:

function example1() {
    $("#example1").css('visibility', 'visible');
}
function example2() {
    $("#example2").css('visibility', 'visible');
}

$(window).on("load", function(){
    var time = 0;
    $('.example-card').each(function() {
        var exampleId = this.id;
        setTimeout(exampleId, time);
        time = time + 200;
    });
});

Спасибо,

функция - это ключевое слово. Используйте другое имя переменной

gurvinder372 11.04.2018 12:25
function - это зарезервированное имя, поэтому ваша переменная не может называться function
Justinas 11.04.2018 12:25

вам не нужна переменная, просто передайте свою функцию в setTimeout, например setTimeout (myfunction, time)

Max 11.04.2018 12:26

Извините, это просто неправильное использование имени в качестве примера

BACode 11.04.2018 12:27

Мне нужно, чтобы это была переменная, потому что у меня будет setTimeout в цикле

BACode 11.04.2018 12:28

Попробуйте объявить свою функцию, прежде чем назначать ее переменной. Я думаю, что подъемник предотвратит возникновение этой проблемы, но стоит сбрасывать со счетов

James Long 11.04.2018 12:29

Я пробовал объявить это до setTimeout, не работает

BACode 11.04.2018 12:31

Это подходит для меня.

Lece 11.04.2018 12:31

код в вопросе работает правильно. в чем проблема действительный? Вы видите ошибку, сразу запускается, вообще ничего не делает ....?

Rhumborl 11.04.2018 12:32

@BACode Я думаю, нам нужен лучший пример. Вы говорите, что это будет вызываться в цикле. Вы можете привести пример цикла?

James Long 11.04.2018 12:32

Я отправил в качестве ответа. Посмотреть на себя...

Lece 11.04.2018 12:33

Это работает на вашей машине?

Lece 11.04.2018 12:35

Я просто добавил лучший пример

BACode 11.04.2018 12:41

@JamesLong Ive только что добавил лучший пример

BACode 11.04.2018 12:43

Это совсем другой вопрос! lol - Во всяком случае, обновили мой ответ вашим новым решением. :)

Lece 11.04.2018 12:44

@Lece Спасибо, что работает! Извините, в следующий раз, когда я опубликую вещи именно такими, какие они есть, не следует предполагать то, о чем я не знаю. Хорошего дня!

BACode 11.04.2018 12:47

Не проблема :)

Lece 11.04.2018 12:49
0
17
110
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

var whatever = myfunction;
var time = 2000;
setTimeout(whatever, time);

function myfunction() {
    alert("hi");
}

Вы пробовали запустить свой сниппет?

Keith 11.04.2018 12:30

Это немедленно вызывает myfunction () и передает возвращаемое значение (void) в setTimeout.

Alex K. 11.04.2018 12:31

@Keith да, это я написал, ты пробовал?

Aneesh R S 11.04.2018 12:31

Итак, сколько секунд вы ждали появления диалогового окна?

Keith 11.04.2018 12:31

Так-то лучше.. :)

Keith 11.04.2018 12:37

@Keith Спасибо, случайно сделал вызов функции вместо ссылки на ее имя

Aneesh R S 11.04.2018 12:38
Ответ принят как подходящий

function example1() {
    $("#example1").css('visibility', 'visible');
    console.log("example1");
}

function example2() {
    $("#example2").css('visibility', 'visible');
    console.log("example2");
}

$(window).on("load", function() {
    var time = 0;
    var func = 0;
    $('.example-card').each(function() {
       switch(this.id) {
       case "example1":
           func = example1;
           break;
       case "example2":
           func = example2;
           break;
       default:
           func = 0;
           break;
       }
       if (func) {
           setTimeout(func, time);
           time = time + 2000;
       }
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<div id="example1" class="example-card" style="visibility: hidden;"></div>
<div id="example2" class="example-card" style="visibility: hidden;"></div>

В настоящее время вы вызываете строку в своем коде, что невозможно:

function test() {
    console.log('Test');
}

var id = 'test';

id(); // Fails, this is the string.

Вы можете получить функцию через window, так как она глобальная:

window[id](); // Success, this is a function.

Это работает, но небезопасно: вы также можете вызывать другие функции, объявленные в окне. Например, если ваш ID - alert, он вызовет функцию предупреждения.

Лучший способ сделать это - объявить функции в объекте:

var callbacks = {
    test: function() {
        console.log('Test')
    }
};

var id = 'test';

callbacks[id](); // Calls the function in the object

Другие вопросы по теме