setTimout回调方法加引号与不加引导的区别,以及带括号与不带括号的区别

196 阅读1分钟

在掘金学习有一段时间了,今天写第一次写文章,文采不好,大家见谅,大家互相学习,有不足的地方,欢迎指出。

不用双引号包着的是捕捉局部作用域的,带括号的是全局

var a = function(){
    alert(1111)
}
 function abc(){
    var a= function ()
    {
        alert(2222)
    }
    setTimeout("a()",3000)//111
    setTimeout(a,3000)//222
}
abc()

当回调不带""号的时候,如果带括号,则同步没有延迟,如果没有括号则异步延迟,可以利用bind改变this指向

var sayHello = function(){
  console.log(111)
};
var myName = 444
foo = function(){
  this.myName = 'Foo function';
}
foo.prototype.sayHello = function(){
  console.log(this.myName);
}
foo.prototype.bar = function(){
  // setTimeout('this.sayHello()', 0)   //333     111
  // setTimeout(this.sayHello(), 2000)   //Foo function 333
  // setTimeout(this.sayHello, 2000) //333   444
  // setTimeout(this.sayHello.apply(this), 1000)   //Foo function 333
  setTimeout(this.sayHello.bind(this), 1000)   // 333  Foo function
  console.log(333)
}
var f = new foo();
f.bar();