Запуск ImageMagick на XAMPP 1.8.3 с Windows 7

Мне нравятся полнофункциональные, языковые агностические ответы от таких людей, как @Arak. Поскольку этот вопрос был помечен JavaScript , хотя я хотел бы отметить некоторые примечания, очень специфичные для этого языка.

В javascript наши выборки для определения области видимости:

  • as-is (без регулировки области)
  • лексический var _this = this; function callback(){ console.log(_this); }
  • bound callback.bind(this)

Стоит отметить, Я думаю, что JavaScript на самом деле не имеет динамического охвата . .bind настраивает ключевое слово this, и это близко, но технически не то же самое.

Вот пример, демонстрирующий оба подхода. Вы делаете это каждый раз, когда принимаете решение о том, как обрабатывать обратные вызовы, чтобы это применимо к обещаниям, обработчикам событий и т. Д.

Лексический

что вы могли бы назвать Lexical Scoping обратных вызовов в JavaScript:

var downloadManager = {
  initialize: function() {
    var _this = this; // Set up `_this` for lexical access
    $('.downloadLink').on('click', function () {
      _this.startDownload();
    });
  },
  startDownload: function(){
    this.thinking = true;
    // request the file from the server and bind more callbacks for when it returns success or failure
  }
  //...
};

Bound

Другой способ охвата - использовать Function.prototype.bind :

var downloadManager = {
  initialize: function() {
    $('.downloadLink').on('click', function () {
      this.startDownload();
    }.bind(this)); // create a function object bound to `this`
  }
//...

Эти методы, насколько мне известно, поведенчески эквивалентны.

20
задан Benjamin 22 August 2015 в 22:52
поделиться