2015-11-01 |

javascript - 常见但是容易错的JS题目解答

js常见但是容易错的JS题目解答

连接

 

1.

"1" + 2 + "3" + 4

  • 10

  • 1234

  • 37

答案:1234,加法优先级等同,从左往右,数字与字符串相加,数字转换成字符串进行运算,结果等同于:"12"+"3"+4 = "123"+4 = "1234"。

2.

4 + 3 + 2 + "1"

  • 10

  • 4321

  • 91

答案:91,优先级同上,从左往右,等同于:7+2+"1" = 9+"1" = "91"。

3.

JavaScript - 常见但是容易错的JS题目解答

  • 1

  • 10

  • Function

  • undefined

  • Error

答案:1,function的定义会提前到当前作用域之前,所以等同于:

JavaScript - 常见但是容易错的JS题目解答所以,在foo=10的时候,foo是有定义的,属于局部变量,影响不到外层的foo。

4.

JavaScript - 常见但是容易错的JS题目解答

  • number

  • function

  • undefined

  • Error

答案:function,与上题类似,等同于:

JavaScript - 常见但是容易错的JS题目解答在return之后声明和赋值的foo都无效,所以返回了function。

5.

JavaScript - 常见但是容易错的JS题目解答

  • 1,2

  • 1,3

  • 2,1

  • 2,3

  • 3,1

  • 3,2

答案:3,1 this指向执行时刻的作用域,go的作用域是全局,所以相当于window,取到的就是window.x,也就是var x=3;这里定义的x。而foo.baz.bar()里面,this指向foo.baz,所以取到的是这个上面的x,也就是1。

6.

JavaScript - 常见但是容易错的JS题目解答

  • 1

  • 2

  • 3

  • 4

  • undefined

答案:4,不管有这个setTimeout还是把这个函数立即执行,它里面这个function都是孤立的,this只能是全局的window,即使不延时,改成立即执行结果同样是4。

7.

JavaScript - 常见但是容易错的JS题目解答

  • 1

  • 2

  • undefined

答案:2,这里主要问题是最外面x的定义,试试把x=1改成x={},结果会不同的。这是为什么呢?在把函数当作构造器使用的时候,如果手动返回了一个值,要看这个值是否简单类型,如果是,等同于不写返回,如果不是简单类型,得到的就是手动返回的值。如果,不手动写返回值,就会默认从原型创建一个对象用于返回。

8.

JavaScript - 常见但是容易错的JS题目解答

  • 1

  • 2

  • 3

  • undefined

答案3,arguments取的是实参的个数,而foo.length取的是形参个数。

9.

JavaScript - 常见但是容易错的JS题目解答

  • function

  • object

  • undefined

答案:undefined,这种情况下bar的名字从外部不可见,那是不是这个名字别人就没法知道了呢?不是,toString就可以看到它,比如说alert(foo),可以看看能打出什么。

10.

JavaScript - 常见但是容易错的JS题目解答

  • 1

  • 2

  • 3

  • undefined

答案:2,数组的原型是Object,所以可以像其他类型一样附加属性,不影响其固有性质。

11.

JavaScript - 常见但是容易错的JS题目解答

  • 1

  • 2

  • undefined

答案:2,实参可以直接从arguments数组中修改。

12.

JavaScript - 常见但是容易错的JS题目解答

  • number

  • undefined

  • object

  • Error

答案:number,foo.length是无法删除的,它在Function原型上,重点它的configurable是false。


0

  • 上一篇:没有了

发表评论

    评价:
    验证码: 点击我更换图片