第一题
var a = 2;
var func = (function () {
var a = 3;
return function () {
a++;
console.log(a);
}
})();
func(); //->4
func(); //->5
第二题
console.log(1 && 2); //->2
console.log(1 || 2); //->1
第三题
window.val = 1;
var json = {
val: 10,
dbl: function () {
this.val *= 2;
}
}
json.dbl(); //json.val=20
var dbl = json.dbl;
dbl(); //window.val=2
json.dbl.call(window); //window.val=4
console.log(window.val + json.val); //4+20=24
第四题
(function () {
var val = 1;
var json = {
val: 10,
dbl: function () {
val *= 2;
}
};
json.dbl(); //val=2
console.log(json.val + val); //10+2=12
}());
第五题
var foo = "hello";
(function () {
var bar = "world";
console.log(foo + bar); //helloworld
})();
console.log(foo + bar); //bar is not defined
第六题
var foo = {
n: 1
};
var bar = foo;
foo.x = foo = {
n: 2
};
console.log(foo.x); //undefined
题七题
console.log("one");
setTimeout(() => {
console.log("two");
}, 0);
console.log("three");
//one three two
第八题
var a = 1;
function func() {
console.log(a);
var a = "in function"
}
func(); //undefined
console.log(a); //1
第九题
(function () {
var a = b = "res";
})();
console.log(b); //res
console.log(a); //a is not defined
第十题
function func1() {
var n = 99;
nAdd = function () {
this.n += 1;
console.log(this.n);
};
function func2() {
console.log(n);
}
return func2;
}
var result = func1();
result(); //99
nAdd(); //NaN
result(); //99
第11题
var obj = {
name: "obj",
dose: function () {
this.name = "dose";
return function () {
return this.name;
}
}
}
console.log(obj.dose().call(this)); //undefined
第12题
var myObject = {
foo: "bar",
func: function () {
var self = this;
console.log("outer func | this.foo" + this.foo); //bar
console.log("outer func | self.foo" + self.foo); //bar
(function () {
console.log("inner func | this.foo" + this.foo); //undefined
console.log("inner func | self.foo" + self.foo); //bar
})();
}
};
myObject.func();
第13题
var k = c = 0;
function a(n) {
return n ? (n - 1) * a(n - 1) : n;
k++;
c++;
if (c > 10) return c;
}
console.log(a(5)) //0
console.log(k) //0
console.log(c) //0
第14题
function cc(i) {
if (i == 3) {
i += 2
};
if (i == 5) {
i--
};
if (i == 4) {
i -= 2
};
return i;
}
for (var i = 2; i < 6; i++) {
console.log(cc(i)) //2 2 2 2
}
第15题
var fullname = "John";
var obj = {
fullname: "Colin",
prop: {
fullname: "Aurelio",
getFullname: function () {
return this.fullname;
}
}
};
console.log(obj.prop.getFullname()); //Aurelio
var test = obj.prop.getFullname;
console.log(test()); //undefined
第16题
var x = 1,
y = z = 0;
function add(n) {
return n = n + 2;
}
y = add(x);
console.log(y); //4
function add(n) {
return n = n + 3;
}
z = add(x);
console.log(z); //4
第17题
(function () {
var x = y = z = 1;
}())
console.log(x); //ReferenceError: x is not defined
console.log(y); //1
console.log(z); //1
第18题
function Foo() {
var i = 0;
return function () {
console.log(i++);
}
}
var f1 = Foo(),
f2 = Foo();
f1(); //0
f1(); //1
f2(); //0
第19题
function test() {
console.log(a); //undefined
console.log(foo()); //2
var a = 1;
function foo() {
return 2;
}
}
test();
第20题
var obj = {
escape: function (str) {
return str.replace("a", "b");
},
func: function () {
for (var i = 0; i < 3; i++) {
var str = "a";
setTimeout(function () {
str = str + "a";
console.log(this.escape(str));
}, i * 1000);
}
}
}
obj.func(); //aa aaa aaaa
第21题
function t(a) {
var a = "hello";
console.log(a); //hello
function a() {
console.log(null);
}
console.log(a); //hello
}
t(null);
第21题
function fn(b) {
console.log(b); //function b() {console.log(b);}
function b() {
console.log(b); //function b() {console.log(b);}
}
b();
}
fn(10);
第22题
function a(b) {
console.log(b); //undefined
b = function () {
console.log(b); //function () {console.log(b);};
};
b();
}
a();
第23题
var a = 1;
function b() {
var a = 2;
function c() {
console.log(a);
}
return c;
}
b()(); // 2
第24题
var a = 100;
function test() {
console.log(a); //100
a = 10;
console.log(a); //10
}
test();
console.log(a); //10
第25题
var a = 100;
function test() {
console.log(a); //undefined
var a = 10;
console.log(a); //10
}
test();
console.log(a); //100
第26题
var a = 10;
function test() {
a = 100
console.log(a); //100
console.log(this.a) //undefined
var a;
console.log(a); //100
}
test();
console.log(a); //10
第27题
var a = (function () {
var i = 0;
return {
aa: function () {
i++;
console.log(i);
},
bb: function (i) {
console.log(i);
}
}
})()
console.log(a) //{ aa: [Function: aa], bb: [Function: bb] }
console.log(a.bb(5)) //5 undefined
console.log(a.bb) //[Function: bb]
第28题
var TestFunc = function () {
console.log(1);
for (var i = 0; i < 5; i++) {
var t = i;
setTimeout(function () {
console.log(t);
}, i * 100)
}
console.log(2);
}
TestFunc(); //1 2 4 4 4 4 4
第29题
var TestFunc = function () {
console.log(1);
for (var i = 0; i < 5; i++) {
setTimeout(function () {
console.log(i);
}(), i * 100)
}
console.log(2);
}
TestFunc(); //1 0 1 2 3 4 2
第30题
var obj = {
name: "AAA"
};
var testFun = function (obj) {
var newObj = obj;
newObj.name = "BBB";
newObj.type = "new";
console.log(newObj);
console.log(obj);
}
console.log(obj); //{name: "AAA"}
testFun(obj); //{name: "BBB", type: "new"} {name: "BBB", type: "new"}
console.log(obj); //{name: "BBB", type: "new"}
第31题
var a = 3;
(function () {
console.log(++a); // NaN
var a = 5;
console.log(++a); // 6
})()
第32题
for (var i = 0; i < 10; i++) {
setTimeout(function () {
console.log(i);
}, 0);
}
// 10 10 10 10 10 10 10 10 10 10
第33题
var z = 10;
function foo() {
console.log(z);
}
(function (funArg) {
var z = 20;
funArg();
})(foo);
// 10
第34题
var data = [];
for (var k = 0; k < 3; k++) {
data[k] = function () {
console.log(k);
};
}
data[0](); // 3
data[1](); // 3
data[2](); // 3
第35题
function fun(n, o) {
console.log(o);
return {
fun: function (m) {
return fun(m, n);
}
};
}
var a = fun(0);
a.fun(1);
a.fun(2);
a.fun(3);
var b = fun(0).fun(1).fun(2).fun(3);
var c = fun(0).fun(1);
c.fun(2);
c.fun(3);
console.log(a); //{ fun: [Function: fun] }
console.log(b); //{ fun: [Function: fun] }
console.log(c); //{ fun: [Function: fun] }
第36题
var a = 100;
function testResult() {
var b = 2 * a;
var a = 200;
var c = a / 2;
console.log(b); //NaN
console.log(c); //100
}
testResult();
第37题
var tt = "aa";
function test() {
console.log(tt); //undefined
var tt = "dd";
console.log(tt); //dd
}
test();
第38题
var test = (function (a) {
this.a = a;
return function (b) {
return this.a + b;
}
}(function (a, b) {
return a;
}(1, 2)));
console.log(test(1)); //2
第39题
(function () {
var a = b = 3;
})();
console.log("a defined?" + (typeof a !== "undefined")); //false
console.log("b defined?" + (typeof b !== "undefined")); //true
第40题
var myObject = {
foo: "bar",
func: function () {
var self = this;
console.log("outer func: this.foo=" + this.foo); //bar
console.log("outer func: self.foo=" + self.foo); //bar
(function () {
console.log("inner func: this.foo=" + this.foo); //undefined
console.log("inner func: self.foo=" + self.foo); //bar
}());
}
};
myObject.func();
第41题
(function () {
console.log(1);
setTimeout(function () {
console.log(2)
}, 100);
setTimeout(function () {
console.log(3)
}, 0);
console.log(4);
})();
// 1 4 3 2
第42题
var len = 4;
while (len--) {
setTimeout(function () {
console.log(len)
}, 300);
console.log(len);
}
// 3 2 1 0 -1 -1 -1 -1
第43题
window.name = "Window";
var cat = {
name: "Cat"
};
var dog = {
name: "Dog",
sound: function (word) {
console.log(this.name + word);
}
};
dog.sound("is pooping"); // Dogis pooping
dog.sound.call(window, "is banking"); //Windowis banking
dog.sound.call(dog, "is banking"); //Dogis banking
dog.sound.apply(cat, ["miaowing"]); //Catmiaowing
第44题
for (var i = 0, j = 0; i < 10, j < 6; i++, j++) {
value = i + j;
}
console.log(value); // 10
第55题
if (!("a" in window)) {
var a = 1;
}
console.log(a); //undefined
第56题
var handle = function (a) {
var b = 3;
var temp = function (a) {
b = a + b;
return temp;
}
temp.toString = function () {
return b;
}
return temp;
}
console.log(handle(4)(5)(6)); //{ [Function: temp] toString: [Function] }