- function f() {
- return {
- a: 1,
- b: "hello"
- c: function () { return 2; }
- }
- }
f().a?f().d?f().c()?- function f() {
- return {
- a: 1,
- b: "hello"
- c: function () { return 2; }
- }
- }
f returns an objectf().a returns 1f().d returns undefined (because property d is not present in the object)f().c() returns 2- function f(n) {
- var fs = [];
- for (var i = 0; i < n; i++) {
- var x = i;
- fs.push(() => x);
- }
- return fs;
- }
f(3) and why?f(3) be [() => 0,() => 1,() => 2]?- function f(n) {
- var fs = [];
- for (var i = 0; i < n; i++) {
- var x = i;
- fs.push(() => x);
- }
- return fs;
- }
f(3) returns [()=>2, ()=>2, ()=>2] because var makes x function-scoped and var x is therefore hoisted outside the loop to the start of function ff(3) becomes [()=>0,()=>1,()=>2] when we use const or let (block-scope)