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
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
728x90
let list = {
value: 1,
next: {
value: 2,
next: {
value: 3,
next: {
value: 4,
next: null
}
}
}
};
function printListReverseLoop(list) {
let cur = list;
const arr = [];
while(cur) {
arr.push(cur.value);
cur = cur.next;
}
for(let i = arr.length - 1; i >= 0; i--) {
console.log(arr[i]);
}
}
function printListReverseRecursion(list) {
if (list.next) {
printListReverseRecursion(list.next);
}
console.log(list.value);
}
printListReverseLoop(list);
printListReverseRecursion(list);

+ Recent posts