console.log在不同的地方也会导致不同
var a = 1;
function b() {
a = 10;
return;
function a() {}
}
b();
console.log(a);
2018年4月18日更新:
第一题:
var a=3 var b=function(){ alert(a) var a = 4 alert(a) } b()
第二题:
var a=3 var b={ a:4, getA:function(){ this.a=5 return function(){return this.a} } } b.getA()()
第三题:
第二题中如何得5?
(答案在最下面)
再看一个类似的:看不太懂二者之间的区别 a和foo.bar.baz()
var x = 0; var foo = { x:1, bar:{ x:2, baz: function () { console.log(this.x) } } } var a = foo.bar.baz foo.bar.baz() // 2 a() //0
假期在家,看到的,昨天看了下;
原文链接:http://wwwcqamin.duapp.com/?p=102#comment-7
请说出下面程序的输出结果
第一题:
1
2
3
4
5
6
7
8
9
10
|
function
funny(a) {
console.log(a);
var
a = 10;
arguments[0] = 20;
return
a;
function
a() {
return
1;
}
}
console.log(funny(8));
|
step1:
function funny(a) { console.log("1: " + a); var a = 10; } console.log(funny(8));
跟我想的恰恰相反……
step2:
func的arg,在func里面又被定义为变量,返回;在被定义为func会有哪些影响呢?
根据例子来看,return后function还是有效的
step3:
假如这样的话,又会如何呢?
function funny(a) { console.log("1 : " + a); var a = 10; arguments[0] = 20; return a; function a() { a = 100; } } console.log(funny(8));
第二题:
1
2
3
4
5
6
7
8
|
function
joke(s) {
return
s;
s = 2;
var
s =
function
() {
return
s;
}
}
console.log(joke(
"are you kinding?"
));
|
第三题:
1
2
3
4
5
6
7
8
|
function
joke(s) {
return
s;
s = 2;
function
s() {
return
s;
}
}
console.log(joke(
"are you kinding?"
));
|
二三的差别就是一个是函数,一个是函数式的变量,但是为什么会产生这两种结果呢?
第四题:
1
2
3
4
5
6
7
8
9
10
11
12
|
function
s() {
return
1;
}
var
a = (
function
(s){
var
s;
return
s;
function
s() {
return
3;
}
s = 2;
})();
console.log(a);
|
第五题:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
function
s() {
return
1;
}
var
a = (
function
(s){
return
s;
function
s() {
return
3;
}
s =
function
() {
return
4;
};
s = 5;
})(
function
() {
return
0;});
console.log(a);
|
step1:函数式和函数放在一起,先执行哪个呢?
function s() { return 1; } var a = (function(s){ return s; function s() { return 3; } s = function() { return 4; }; s = 5; })(); console.log(a);
step2:return在上面的时候,无论两个如何放置都先执行s()
return 在下面的时候,无论两个如何放置都先执行var s = func()
这是为什么呢?
var a = (function(){ return s; s = function() { return 4333; }; function s() { return 3; } })(); console.log(a);
var a = (function(){ s = function() { return 4333; }; function s() { return 3; } return s; })(); console.log(a);
第六题:
1
2
3
4
5
|
var
i = 0;
for
(
var
j=0;j<10;j++) {
i = i++;
}
console.log(i);
|
第七题:
1
2
3
4
5
6
7
8
9
|
var
a = {
"x"
: 1};
var
b = a;
a.x = 2;
console.log(b.x);
a = {
"x"
:3};
console.log(b.x);
a.x = 4;
console.log(b.x);
|
第八题:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
function
haha() {
return
true
;
}
function
hehe() {
if
(!haha() && [] == ![]) {
return
"^_^"
;
}
function
haha() {
return
false
;
}
return
"T_T"
;
}
console.log(hehe());
|
第九题:
1
2
3
|
var
a =
function
(t) {
return
t; }
(1 + 2).toString();
console.log(a);
|
第十题:
1
2
3
4
5
6
7
8
9
|
function
f(a){
console.log(a);
console.log(arguments[0]);
var
a = 10;
console.log(a);
return
a;
function
a(){};
}
f(1);
|
第十一题:
1
2
3
4
5
6
|
console.log(Function
instanceof
Object);
var
arr = [];
console.log(arr.constructor === Array.prototype.constructor);
var
num1 =
new
Object(1);
var
num2 =
new
Number(2);
console.log(num1.constructor === num2.constructor);
|
第十二题: (菜锅友情赞助)
1
2
3
4
5
6
|
var
a =
function
b() {
console.log(b);
console.log(a);
return
b;
}();
console.log(b);
|
1.func a ; 20
function(){}虽然在return之后,但是这样函数声明被提前了
2.are you kinding?
return 后面不执行
3.function s()…
同1
4.function s()…
同1
5.function s() {
return 3;
}
猜错了,以为是return 0 原来 return 3 还在参数后面执行
6. 0
考眼力啊
7.2,2,2
object是指向而非复制
8.^_^
[] == ![],[]建立新的数组,所以是true。假如是{} != {} 就是报错了,实在不知道为什么
9.著名的括号问题啊,头一次听说,真汗颜 ,见知乎
10.func func 10
11.ture ture ture
一切皆是obj;
12.func(){…};undefined;报错
最后一个是因为 b 在 a 里面,全局里面没有
博主回复:
这些题主要是声明提前的陷阱题,还有几个是比较经典的陷阱题,只是被我稍微修改了下。[] == ![],其实是这样的:![]会转换为false,在等号关系式中,由于两边类型不相同且有一边是Boolean型变量,则转换成数字比较,false-》0 ,[]-》0, 故 [] == ![]
b.getA().call(b)