Оптимальный / предпочтительный способ вызова SP.ClientContext.executeQueryAsync в SharePoint

Я изучал объектную модель на стороне клиента и наткнулся на методexecuteQueryAsync, Я обнаружил, что есть несколько способов вызвать этот метод. Вот некоторые из них, которые я нашел:

var context = new SP.ClientContext.get_current();

// Option 1
context.executeQueryAsync(
    function(sender, args){ },
    function(sender, args){ }
);

// Option 2
context.executeQueryAsync(
    Function.createDelegate(this, _onSucceed), 
    Function.createDelegate(this, _onFail)
);

// Option 3
context.executeQueryAsync(
    Function.createDelegate(this, this._onSucceed), 
    Function.createDelegate(this, this._onFail)
);

// Option 4
context.executeQueryAsync(_onSucceed, _onFail);

Какой из этих способов является наиболее оптимальным / предпочтительным? Также, что делает заявлениеFunction.createDelegate делать?документация для этой функции кажется очень загадочным для меня.