# 程序执行结果判断题
# exapmle-1
var m = 1;
function add(n) {
return (n = n + 1);
}
y = add(m);
function add(n) {
return (n = n + 3);
}
z = add(m);
console.log(y, z);
// y和z的最终结果为: 4,4
// 解析:定义的函数会优先解析,而不是顺序解析
// y = add(m);语句和z = add(m); 语句调用的都是第二个add function
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# exapmle-2
(function() {
var a = (b = 5); // b=5前面没有var,相当于声明为全局变量
console.log(a); // 5
})();
console.log(b); // 5
console.log(a); // Uncaught ReferenceError: a is not defined
1
2
3
4
5
6
2
3
4
5
6
# exapmle-3
var z = 10;
function foo() {
console.log(z); // 10
}
(function(funArg) {
var z = 20;
funArg();
})(foo);
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# exapmle-4
var data = [];
for (var k = 0; k < 3; k++) {
data[k] = function() {
console.log(k);
};
}
data[0](); // 3
data[1](); // 3
data[2](); // 3
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# exapmle-5
var s = {
s: "student",
getS: function() {
console.log(this.s);
}
};
var t = {
s: "teaher"
};
var getS = s.getS;
var getS1 = getS.bind(s);
// 写出以下输出结果
s.getS(); // student
s.getS.apply(t); // teacher
getS(); // {s: "student", getS: ƒ} this指向window
getS1.call(t); // student
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# exapmle-6
let a = "window";
const obj = {
a: "a",
fn1: () => {
console.log(this.a); // this指向window,但是let声明的变量不属于window
},
fn2: function() {
console.log(this.a); // this指向obj对象
}
};
obj.fn1(); // undefined
obj.fn2(); // a
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# exapmle-7
var x = new Boolean(false);
if (x) {
console.log("hi");
}
var y = Boolean(0);
if (y) {
console.log("hello");
}
// 只会输出hi,x是一个对象
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# exapmle-8
setTimeout(function() {
console.log(1);
}, 0);
new Promise(function executor(resolve) {
console.log(2);
for (var i = 0; i < 10000; i++) {
i == 9999 && resolve();
}
console.log(3);
}).then(function() {
console.log(4);
});
console.log(5);
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# exapmle-9
let a = 1;
console.log(a-- - a); // 不论a取什么值,结果还是a
console.log(a); // 此时a变成了原来的值-1
1
2
3
2
3