Static function - is not entitled to any object instance. Which means that function is accessible with out instance and it also cannnot access any instance data. Basically it helps to expose functionality which kind of util. 
As MDN describes it, “Static methods are called without instantiating
  their class and are also not callable when the class is instantiated.
  Static methods are often used to create utility functions for an
  application.” In other words, static methods have no access to data
  stored in specific objects.
Example : Math.Sqrt(val) - is util function. 
And Static function must need be pure functions, that doesnt modify the object data and provides utility.
so here how it works 
class className {
  instanceCounter = 0;
  staticCounter = 0;
  constructor() {
  }
  static myStaticFunction() {
    this.staticCounter++;
    console.log("myStaticFunction"+ staticCounter);
  }
  normalFunction() {
    this.instanceCounter++;
    console.log("normalFunction" + instanceCounter);
  }
}
now if i make call 
   //for static   
   className.myStaticFunction();//print 1
   className.myStaticFunction();//print 2
   //for instace 
   new className().normalFunction();//print 1
   new className().normalFunction();//print 1