728x90
// function makeArmy() {
// let shooters = [];
// let i = 0;
// while (i < 10) {
// const copyIndex = i;
// let shooter = function() { // create a shooter function,
// console.log( copyIndex ); // that should show its number
// };
// shooters.push(shooter); // and add it to the array
// i++;
// }
// // ...and return the array of shooters
// return shooters;
// }
function makeArmy() {
let shooters = [];
for(let i = 0; i < 10; i++) {
const shooter = function() {
console.log( i );
};
shooters.push(shooter);
}
return shooters;
}
let army = makeArmy();
army[0](); // 0
army[1](); // 1
army[2](); // 2
army[3](); // 3
army[4](); // 4
army[5](); // 5
army[6](); // 6
army[7](); // 7
army[8](); // 8
army[9](); // 9
728x90
// function byField(field) {
// return function(a, b) {
// return a[field] > b[field] ? 1 : -1;
// }
// }
function byField(field) {
return (a, b) => a[field] > b[field] ? 1 : -1;
}
const users = [
{ name: "John", age: 20, surname: "Johnson" },
{ name: "Pete", age: 18, surname: "Peterson" },
{ name: "Ann", age: 19, surname: "Hathaway" }
];
users.sort(byField('name'));
console.log('sort by name field', users);
users.sort(byField('age'));
console.log('sort by age field', users);
728x90
function inBetween(a, b) {
return function(x) {
return x >= a && x <= b;
}
}
function inArray(arr) {
return function(x) {
return arr.includes(x);
}
}
const arr = [1, 2, 3, 4, 5, 6, 7];
console.log( arr.filter(inBetween(3, 6)) ); // 3, 4, 5, 6
console.log( arr.filter(inArray([1, 2, 10])) ); // 1, 2
728x90
let x = 1;
function func() {
console.log(x); // ?
// dead zone
let x = 2;
}
func();
// Error
728x90
function sum(a) {
return function(b) {
return a + b; // takes "a" from the outer lexical environment
}
}
// sum(1)(2) = 3
// sum(5)(-1) = 4
console.log(sum(1)(2));
console.log(sum(5)(-1));
728x90
"use strict"
let phrase = "Hello";
if (true) {
let user = "John";
function sayHi() {
console.log(`${phrase}, ${user}`);
}
}
sayHi();
// Answer: error
// sayHi function located in if block
728x90
function Counter() {
let count = 0;
this.up = function() {
return ++count;
};
this.down = function() {
return --count;
};
}
let counter = new Counter();
console.log( counter.up() ); // ?
console.log( counter.up() ); // ?
console.log( counter.down() ); // ?
// Answer: 1
// Answer: 2
// Answer: 1
// it has same lexical environment
728x90
function makeCounter() {
let count = 0;
return function() {
return count++;
};
}
let counter = makeCounter();
let counter2 = makeCounter();
console.log( counter() ); // 0
console.log( counter() ); // 1
console.log( counter2() ); // ?
console.log( counter2() ); // ?
// Answer: 0
// Answer: 1
// because it has different lexical environment
728x90
function makeWorker() {
let name = "Pete";
return function() {
console.log(name);
};
}
let name = "John";
// create a function
let work = makeWorker();
// call it
work(); // what will it show?
// Answer: Pete
728x90
let name = "John";
function sayHi() {
console.log("Hi, " + name);
}
name = "Pete";
sayHi(); // what will it show: "John" or "Pete"?
// Answer: Pete

+ Recent posts