There is no precise defintion for a "microservice" - perhaps best described as an independently deployable light weight software process. Independent is the key word. The microservice is internally complete - including its own datasource - not shared with anotehr dataservice. The microservice is usually a Bounded Context - as thought of in Domain Driven Design (DDD) A microservice should not be confused with a component used in an in-memory function call. As a Bounded Context, each microservice is organized around a business capability - a singluar business process.
A microservice architecture is an application contining a suite of microservices, communicating with lightweight mechanisms and often publishing as an Http resource API. This architecure is an example of loose-coupling. It is a response to the problems assoicated with monolithic applications and tight coupling. Each microservice within the application my be written in different languages - exposing a REST interface to the world. In summary :