Подтвердить что ты не робот

Зачем использовать обертку функции javascript (добавляется в coffeescript) ".call(this)"

Когда я использую последний (1.0) выпуск кофе script, простой выход javascript выглядит так (по умолчанию):

(function() {
  var a;
  a = 1;
}).call(this);

Что делает .call(this) и что может быть причиной его добавления?

4b9b3361

Ответ 1

Он создает функцию, а затем вызывает себя с пространством родительских функций/объектов.

.call и .apply - разные методы вызова функции. В основном вы создали функцию, которая ничего не делает, кроме набора a = 1 в пределах своей области.

В javascript вам нужно понять, что каждая функция является объектом, а this - это то, что относится к текущему объекту/функции. Использование .call(this) переопределяет this изнутри функции и заменяет его на один из вызывающего контекста.

Ответ 2

Это способ убедиться, что скомпилированный CoffeeScript имеет собственную область имен переменных. Это имеет преимущества с точки зрения эффективности и простоты (вы знаете, что сгенерированный JavaScript не будет топать на переменные, используемые другим кодом). Вы можете отключить его с помощью параметра --bare (или -b) компилятору CoffeeScript.

Причина call(this) заключается в том, чтобы убедиться, что CoffeeScript имеет тот же this, что и область, в которой он размещен, потому что функции обычно не наследуют свой объект this из окружающего контекста.