Javascript将变量传递给超时函数

时间:2016-05-07 17:51:52

标签: javascript timeout vue.js

我试图在一段时间后设置一个值。

由于某种原因,我无法在函数

中访问变量
setTimeout(function() {
    console.log('hello');
    this.list[this.listIndex].glamour.show = true;           
}, 1000);

我在VueJS方法中,我正在尝试访问VueJS模板的属性。

感谢我提前输入

2 个答案:

答案 0 :(得分:3)

您需要创建一个引用当前对象的变量:

var self = this;
setTimeout(function() {
  console.log('hello');
  self.list[self.listIndex].glamour.show = true;
}, 1000);

答案 1 :(得分:0)

this指的是您调用该函数的对象。默认情况下,它设置为窗口对象。

function sayHello () {
    alert("Hello, I'm " + this.nickname + ".");
}
function make (nickname) {
    return {
        nickname: nickname,
        sayHello: sayHello
    };
}
bob = make("Bob");
jim = make("Jim");
nickname = "Window";
bob.sayHello(); /////////////// alerts "Hello, I'm Bob."
jim.sayHello(); /////////////// alerts "Hello, I'm Jim."
sayHello(); /////////////////// alerts "Hello, I'm Window."
window.sayHello(); //////////// alerts "Hello, I'm Window."
setTimeout(sayHello, 0); ////// alerts "Hello, I'm Window."
setTimeout(bob.sayHello, 0); // alerts "Hello, I'm Window."

要解决此问题,您至少有两种可能性:

// a closure
setTimeout(function () { bob.sayHello(); }, 0);
// the .bind() method
setTimeout(sayHello.bind(bob), 0);