SharePoint 2010 metteva a disposizione il metodo ExecuteOrDelayUntilScriptLoaded per eseguire del codice JavaScript solo dopo il caricamento di una specifica libreria, ad esempio:
ExecuteOrDelayUntilScriptLoaded(miaFunzione, "sp.js");

function miaFunzione() {
  ...
}
nel caso in cui doveva essere utilizzato con JQuery andava incluso nel metodo ready:
$(document).ready(function () {
  ExecuteOrDelayUntilScriptLoaded(miaFunzione, "sp.js");
});

function miaFunzione() {
  ...
}
Tutto bene quindi?
Si ma solo 2010. Sulle versioni successive il metodo non è più disponibile ed è stato sostituito da SP.SOD.executeFunc:
SP.SOD.executeFunc("sp.js", "SP.ClientContext", miaFunzione);

function miaFunzione() {
  ...
}
Quindi come fare per essere pronti a migrare ad una versione successiva?

L'ideale è sostituire tutti i metodi ExecuteOrDelayUntilScriptLoaded con una funzione equivalente che si adatti alla versione di SharePoint prima della migrazione, in modo da avere il codice funzionante su 2010 e pronto a funzionare anche sulle versioni successive.

In questo caso ci viene in aiuto la proprietà JavaScript _spPageContextInfo.webUIVersion presente sia su 2010, 2013 e 2016:
(document).ready(function () {
  if(_spPageContextInfo.webUIVersion === 4) { // verifico la versione di SharePoint
    // 4 = sono su SharePoint 2010
    ExecuteOrDelayUntilScriptLoaded(miaFunzione, "sp.js");
  } else {
    // sono su versioni successive
    SP.SOD.executeFunc("sp.js", "SP.ClientContext", miaFunzione);
  }
});
Lo script parte da presupposto che si usi una versione 2010 o successiva, non prende in considerazione le versioni precedenti.