let letNumber = 1000; const constNumber = 10; var varNumber = -1234; const constNegativeFloat = -1.23; var tooMuch = Infinity; nothing = null; let listofthings = ["thing", 'thing2', `foo`, ["bar"]]; // Simple comment /** * ######### * Multiline * comment * ######### */ let test; for (let i = 0; i < constNumber; i++) { if (test) continue; else test += 1; // random things } while(test < 100 && typeof test === "number") { test = test > 30 ? test+5 : test+1; } function weatherSays(when=Date.now()) { return "rain"; } const thereAreClouds = true; const cloudsCount = 20; switch(weatherSays(Date.now())) { case 'rain': break; case 'sun': default: break; } let rain = false; if ((thereAreClouds && cloudsCount >= 20) || weatherSays() === "rain") { rain = false; } else if (thereAreClouds && weatherSays() == "rain") { // oh no, unsafe two equals checking! rain = true; } else { rain = !!cloudsCount; } class Forecast { constructor(where, isGonnaRainA=true, isGonnaRainB=false, isGonnaRainC=false, ...randomArgs) { this.station = { location: [where.x, where.y, where.z], surroundings: { zoneA: { location: [1, 2, 3], isGonnaRain: isGonnaRainA }, zoneB: { location: [-1, 2, 2], isGonnaRain: isGonnaRainB }, zoneC: { location: [-2, 0, 0], isGonnaRainC: isGonnaRainC }, } }; } async getLocalPrevisions() { const rainZones = [this.station.surroundings.zoneA.isGonnaRain, this.station.surroundings.zoneB.isGonnaRain, this.station.surroundings.zoneC.isGonnaRain]; return await rainZones.filter(z => !!z).length > (rainZones.length / 2); } communicatePrevisions(isGonnaRain=undefined) { if (isGonnaRain) console.log("Take the umbrella."); } destroy() { delete this.station; } static startHiring() { console.log("We're looking for weather presenters."); console.log("A lot of presenters came. Hiring stops."); } /* This forecasting station is magic. It can generate rain, but this method is secret because it's a generator function - nobody uses them! */ * generateRainInZoneC(clouds=[1, 2, 3]) { this.station.surroundings.zoneC.isGonnaRain = true; const makeRain = () => { return "raining!"; }; yield clouds; // first, keeps clouds do { console.log(makeRain()); yield clouds.pop(); // then all clouds do rain } while(clouds.length >= 1); } } Forecast.startHiring(); const forecasting = new Forecast([3, 3, 3]); (async() => { const raining = forecasting.generateRainInZoneC(); raining.next(); forecasting.communicatePrevisions(await forecasting.getLocalPrevisions()); raining.next(); raining.next(); raining.return("stop!"); forecasting.destroy(); })();