JavaScript is an object-oriented language, but the prototyping used in the language causes differences in working with objects as compared to traditional class-oriented languages. In addition, JavaScript has a number of properties inherent in functional languages ​​— functions like first-class objects, objects like lists, currying, anonymous functions, closures — which gives the language additional flexibility.