Что это за функция с квадратными скобками слева, но без имени перед функцией?Это особый вид функции?
Функция представляет собой функцию anonymous
, которая преобразуется в function expression
, оборачивая ()
вокруг нее.И, добавив еще ()
, вы вызываете выражение функции.Такие выражения вызываемой функции известны как IIFE (выражение немедленного вызова функции), что означает, что вы вызываете функцию, как только она определена.
например
(function(x) {console.log(x);})(2); // paints 2
В основном эта функция принимает обратный вызов в качестве слушателей, она определена и выполняется вместе?
Да, функция определена и запущенавсе вместе.IIFE принимает значения, определенные в ()
, в качестве аргументов и передает их функции.
(function(arg1, arg2, ...argN){ ... // function definition})(param1, param2, ... paramN);
Итак, разбиение IIFE будет следующим:
определение функции
function(handlers) {
Object.keys(handlers).forEach(function(observableName) {
var observable = app.ko.observable().extend({
notify: 'always'
});
that[observableName] = observable;
var f = handlers[observableName];
if (f) {
observable.subscribe(f);
}
});
}
аргумент функции 1 (обработчики)
{
onCallIgnored: defaultCallHandler,
onCallStateChanged: function(call) {
that.videoState(call.getRemoteVideoState());
},
onPlacingCall: function(call) {
callParams = app.utils.cloneObj(call);
},
onIncomingCall: function(call) {
that.activeCall = call;
callParams = app.utils.cloneObj(call);
setCallEstablishingTimeout();
app.playSound("ringtone");
that.callProgressTime("");
},
onUpdateCallInfo: function(call) {
console.log(call);
}
}