Надеюсь, заголовок не требует пояснений, в чем преимущество использования метода .call () в Javascript по сравнению с простым написанием functionName (); ?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если вы ничего не передадите в call(), он будет таким же; функция будет запущена с той же областью, что и вызов call():
function test() {
alert(this);
}
test(); // alerts the window object
test.call(); // alerts the window object
Но если вы передадите объект в call(), этот объект будет использоваться в качестве области:
test.call("hi"); // alerts "hi"
Приведу пример:
<html>
<head>
<script type = "text/javascript">
var developerName = "window";
function test(){
var developer = function(developerName ){ this.developerName = developerName;}
developer.prototype = {
displayName : function(){alert(this.developerName );}
}
var developerA = new developer("developerA");
var developerB = new developer("developerB");
developerA.displayName();//will display an alert box with "developerA" as its inner text
developerA.displayName.call();//will display an alert box with "window" as its inner text, in this case the context is the window object.
developerA.displayName.call(developerB);//will display an alert box with "developerB" as its inner text
}
</script>
</head>
<body>
<input type = "button" onclick = "test()" value = "display names"/>
<body>
</html>
Дополнительная литература:
http://www.alistapart.com/articles/getoutbindingsituations
Надеюсь это поможет.
Также есть functionName.apply (). См. Пункты 15.5.4.3 и 15.5.4.4 в ecma-international.org/publications/files/ECMA-ST/Ecma-262.p df