Energy efficiency is a significant characteristic of battery-run devices such as sensors, RFID and mobile phones. In the present scenario, this is the most prominent requirement that must be served while introducing a communication protocol for an IoT environment. IoT network success and performance enhancement depend heavily on optimization of energy consumption that enhance the lifetime of IoT nodes and the network. In this context, this paper presents a comprehensive review on energy efficiency techniques used in IoT environments. The techniques proposed by researchers have been categorized based on five different layers of the energy architecture of IoT. These five layers are named as sensing, local processing and storage, network/communication, cloud processing and storage, and application. Specifically, the significance of energy efficiency in IoT environments is highlighted. A taxonomy is presented for the classification of related literature on energy efficient techniques in IoT environments. Following the taxonomy, a critical review of literature is performed focusing on major functional models, strengths and weaknesses. Open research challenges related to energy efficiency in IoT are identified as future research directions in the area. The survey should benefit IoT industry practitioners and researchers, in terms of augmenting the understanding of energy efficiency and its IoT-related trends and issues.