Hi I am OneJar
Hi I am Tony Stark
Hi I am Steven Rogers
function Person(n) {
this.name = n;
this.sayHi = function(){
return "Hi, I'm " + this.name;
}
}
var p1 = new Person("OneJar");
var p2 = new Person("Tony Stark");
console.log(p1.sayHi()); // "Hi, I'm OneJar"
console.log(p2.sayHi()); // "Hi, I'm Tony Stark"
p2.name = "Steven Rogers"; // (外部仍可以直接存取)
console.log(p2.sayHi()); // "Hi, I'm Steven Rogers"
class Person {
constructor(name) {
this.name = name;
}
sayHi(){
return `Hi I am ${this.name}`;
}
}
var p1 = new Person("OneJar");
var p2 = new Person("Tony Stark");
console.log(p1.sayHi()); // "Hi, I'm OneJar"
console.log(p2.sayHi()); // "Hi, I'm Tony Stark"
p2.name = "Steven Rogers"; // (外部仍可以直接存取)
console.log(p2.sayHi()); // "Hi, I'm Steven Rogers"
function createPerson(name){
var methods = {
getName: function() { return name; },
setName: function(n) { name = n; },
sayHi: function() { return `Hi I am ${name}`; }
}
return methods;
}
var p1 = createPerson('OneJar');
var p2 = createPerson('Tony Stark');
console.log(p1.sayHi()); // "Hi I am OneJar"
console.log(p2.sayHi()); // "Hi I am Tony Stark"
p2.setName('Steven Rogers');
console.log(p2.sayHi()); // "Hi I am Steven Rogers"
function buildFunctions() {
var arr = [];
for(var i = 0; i < 3; i++) {
arr.push(function() {
console.log(i);
});
}
return arr;
}
var fs = buildFunctions();
fs[0]();
fs[1]();
fs[2]();
3
3
3
function buildFunctions() {
var arr = [];
...........
}
var fs = buildFunctions();
..........
function buildFunctions() {
var arr = [];
for(var i = 0; i < 3; i++) {
arr.push(function() {
console.log(i);
});
}
.................
}
................
function buildFunctions() {
............
return arr;
}
var fs = buildFunctions();
.............
................
var fs = buildFunctions();
fs[0]();
fs[1]();
fs[2]();
function buildFunctions() {
var arr = [];
for(var i = 0; i < 3; i++) {
let j = i; // 用 `let` 宣告變數 `j`
arr.push(function() {
console.log(j); // 這裡引用變數 `j`
});
}
return arr;
}
var fs = buildFunctions();
fs[0]();
fs[1]();
fs[2]();
0
1
2
function buildFunctions() {
var arr = [];
...........
}
var fs = buildFunctions();
..........
function buildFunctions() {
..................
for(var i = 0; i < 3; i++) {
let j = i;
...................
}
.......................
}
................
function buildFunctions() {
.....................
for(var i = 0; i < 3; i++) {
let j = i;
arr.push(function() {
console.log(j);
});
}
................
}
.............
function buildFunctions() {
..................
for(var i = 0; i < 3; i++) {
let j = i;
...................
}
.......................
}
................
function buildFunctions() {
.....................
for(var i = 0; i < 3; i++) {
let j = i;
arr.push(function() {
console.log(j);
});
}
................
}
.............
function buildFunctions() {
............
return arr;
}
var fs = buildFunctions();
.............
................
var fs = buildFunctions();
fs[0]();
fs[1]();
fs[2]();
function buildFunctions() {
var arr = [];
for(var i = 0; i < 3; i++) {
var j = i; // 改用 `var` 宣告
arr.push(function() {
console.log(j);
});
}
return arr;
}
fs2 = buildFunctions();
fs2[0]();
fs2[1]();
fs2[2]();
2
2
2
function buildFunctions() {
var arr = [];
var i, j; // 因為 Hoisting 效果,相當於宣告在這
for(i = 0; i < 3; i++) {
j = i;
arr.push(function() {
console.log(j);
});
}
return arr;
}