js一些题目-this指向和变量提升

  

 

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)

 

 

 

 

 

转载于:https://www.cnblogs.com/della/p/3356879.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值