; to the end of the function calls in order for them both to work.
<input id="btn" type="button" value="click" onclick="pay(); cls();"/>variableVAR is visible outside the if statement because it uses function scope instead of block scopefunction callMePlease() {
if (1 == 1) {
let variableLET = 'LET'
var variableVAR = 'VAR'
}
document.write('My ' + variableVAR + '</br>')
document.write('My ' + variableLET + '</br>')
}
callMePlease()
Another variable variableLET is not visible outside the block because it uses block scope and the code above will generate the following error:Uncaught ReferenceError: variableLET is not definedlet uses block scopelet myNumber = 1
function callMePlease() {
let myNumber = 2
if (1 == 1) {
let myNumber = 3
document.write('My number is: ' + myNumber + '</br>')
}
document.write('My number is: ' + myNumber + '</br>')
}
document.write('My number is: ' + myNumber + '</br>')
callMePlease()filter, map together.
Uses onlyMen and underTwenty methods for filtering the result.
Uses onlyNames function to take only names from the objects.let people = [
{name: 'გიორგი', age: 15, gender: 'male'},
{name: 'ეკატერინე', age: 35, gender: 'female'},
{name: 'დავითი', age: 75, gender: 'male'},
{name: 'ნინო', age: 18, gender: 'female'},
{name: 'თორნიკე', age: 11, gender: 'male'}
]
function onlyMen(human) {
return human.gender == 'male'
}
function underTwenty(human) {
return human.age < 20
}
function onlyNames(human) {
return human.name
}
let onlyBoysNames = people.filter(onlyMen).filter(underTwenty).map(onlyNames)
document.write(onlyBoysNames)filter filters the array members based on the getNames function conditionlet myFavoritePlanets = [
{name: 'Earth', radius: 6371},
{name: 'Jupiter', radius: 69911},
{name: 'Neptune', radius: 24622, moons: ['Triton', 'Thalassa', 'Nereid', 'Proteus', 'Hippocamp', 'Naiad']}
]
let biggerPlanetsNames = myFavoritePlanets.filter(getNames);
function getNames(planet) {
return planet.radius > 20000
}
console.log(biggerPlanetsNames );map function calls getNames function for each item of the array.
Each time the function getNames returns only names from each objectlet myFavoritePlanets = [
{name: 'Earth', radius: 6371},
{name: 'Jupiter', radius: 69911},
{name: 'Neptune', radius: 24622, moons: ['Triton', 'Thalassa', 'Nereid', 'Proteus', 'Hippocamp', 'Naiad']}
]
let namesOnly = myFavoritePlanets.map(getNames);
function getNames(planet) {
return planet.name
}
console.log(namesOnly);click event listener for two functions: func1, func2 to document object.
After clicking three times we remove the event listener for func1 functionlet counter = 0;
document.addEventListener('click', func1);
document.addEventListener('click', func2);
function func1(){
console.log('You clicked me!');
if (counter>2) {
console.log('Max limit is 3');
document.removeEventListener('click', func1);
}
}
function func2(){
counter ++;
console.log('counter: '+counter);
}let car = {
mark: 'Toyota',
model: 'AE86',
drift: function(place){ //method
return 'car is drifting on the ' + place;
}
};
---------------------------------------------------------------------------------------------------------------------------------------------------
2)Object() constructor
The Object constructor creates an object wrapper for the given valuelet car = new Object();
car.mark = 'Toyota';
car.model = 'AE86';
car.drift = function(place){
return this.mark+ ' is drifting on the ' + place;
}
new Object('text') gives us String object, new Object(123) gives us Number object and so on, anything other than null/undefined given to this constructor will create wrapper for that value___________
3)Constructor functions
Blueprint function to create any number of objects that are the same type and inherit the same functionalityfunction Car(mark, model, speed){
this.mark = mark;
this.model = model;
this.speed = speed;
}
Car.prototype.drift = function(place){
return this.mark+ ' is drifting on the ' + place;
}
let car1 = new Car('Toyota', 'AE86', 240);
let car2 = new Car('Subaru', 'Impreza', 200);
this keyword is an object that owns the code but in this context it is meant to be the newly created object by this constructor
---------------------------------------------------------------------------------------------------------------------------------------------------
4)Object.create() method
let car = Object.create({});
car.mark = 'Toyota';
car.model = 'AE86';
car.drift = function(place){
return this.mark+ ' is drifting on the ' + place;
}
giving null/undefined to create method will cause newly created object to have no prototype, which by default should be Object.prototype,
or alternatively you can use prototype of another constructor function let car = Object.create(Car.prototype)
or object itself to set a new prototype of an object let car = Object.create({prototype_property1: 'value1'})
you can also use property descriptor to assign properties more precisely as you desire
let car2 = Object.create({}, {
mark: {
value: 'Toyota'
writable: true // false by default
enumerable: true // false by default
configurable: true // false by default
},
model: {
value: 'AE86'
},
speed: {
value: 240
},
drift: {
value: function(place){
return this.mark+ ' is drifting on the ' + place;
}
},
})
---------------------------------------------------------------------------------------------------------------------------------------------------
5)ES6 class syntax
WARNING: ES6 features might not be available for older version of some browsers
class Car{
constructor(mark, model, speed){
this.mark = mark;
this.model = model;
this.speed = speed;
}
drift(place){
return this.mark+ ' is drifting on the ' + place;
}
}this is basically the same as constructor function but the different syntax
---------------------------------------------------------------------------------------------------------------------------------------------------
6)singleton pattern
downside of this is that you can't create many instances and methods will repeat
let car = new function(){
this.mark = 'Toyota';
this.model = 'AE86';
this.speed = 240;
this.drift = function(place){
return this.mark+ ' is drifting on the ' + place;
}
}Higher order function function doubleMe(number) {
return 2*number;
}
function tripleMe(number) {
return 3*number;
}
function quadrupleMe(number) {
return 4*number;
}
document.write(doubleMe(10));
document.write(tripleMe(10));
document.write(quadrupleMe(10));
Creates the same multiplier functions using Higher order function
In this case we only need to create one function instead of 3 multiplier functionsfunction multiplier(multiply) {
return function(number){
return number*multiply;
};
}
let double = multiplier(2);
let triple = multiplier(3);
let quadruple = multiplier(4);
document.write(double(10));
document.write(triple(10));
document.write(quadruple(10));document.addEventListener('click', func);
function func() {
alert('You clicked me!');
}Using anonymous function:document.addEventListener('click', function() {
alert('You clicked me!');
});
Another built-in function foreach that receives a function as an argumentlet greatColors = ['green', 'orange', 'yellow'];
greatColors.forEach(listColors);
function listColors(color) {
document.write('The color ' + color + ' is a great color<br>');
}