直接调用函数和使用apply之间的Javascript区别

时间:2015-08-11 06:12:20

标签: javascript

两者都在同一个函数中调用相同的函数,那么这些语句之间的区别是什么。

this.subject.hello();

apply()用于在不同的上下文中调用该方法。但是在这里它被称为相同的背景。

this.subject.hello.apply(this.subject, arguments)

5 个答案:

答案 0 :(得分:2)

第一个调用它没有参数。第二个用当前函数的参数调用它。

this.subject = {
  hello: function() {
    console.log("Hello called with arguments " + JSON.stringify(arguments));
  }
};

function callHello() {
  console.log("this.subject.hello();");
  this.subject.hello();
  console.log("this.subject.hello.apply(this.subject, arguments);");
  this.subject.hello.apply(this.subject, arguments);
}

callHello(1, 2);
// => this.subject.hello();
//    Hello called with arguments {}
//    this.subject.hello.apply(this.subject, arguments);
//    Hello called with arguments {"0":1,"1":2}

答案 1 :(得分:0)

唯一的区别是,在第一次通话中,你没有传递任何参数。

答案 2 :(得分:0)

使用User我们可以更改方法的上下文,通常它需要当前对象的上下文。 context作为第一个参数是apply方法传递,其他参数在数组中传递,该数组是apply方法中的第二个参数。

您可以参考的applycall之间的其他查询 Stackoverflow question : What is the difference between call and apply?

答案 3 :(得分:0)

唯一的区别是一个xuri += sprintf( "http://%s", r->hostname ); 而另一个没有。

答案 4 :(得分:0)

以下是var prevVal; $('#hall').on('focus', function (){ prevVal=$( "#hall:selected" ).text(); }); $('#hall').on('change', function (){ if(prevVal=$( "#hall:selected" ).text()){ alert('same val selected'); } }); apply和JavaScript上下文主题的一些很棒的答案: