测试:你自认为理解了JavaScript?

Dmitry Baranovskiy 的博客中有篇文章(链接),其中有五段小代码,用来测试是否理解JavaScript 的核心,闭包和作用域。大家先试着给出 alert 语句的输出结果。之后再建一个测试文件,检测你的答案。

 

原文:Dmitry Baranovskiy,编译:伯乐在线

译文:http://blog.jobbole.com/30468/

【如需转载,请在正文中标注并保留原文链接、译文链接和译者等信息,谢谢合作!】

收藏 6 评论

相关文章

可能感兴趣的话题



直接登录
最新评论
  • 函数声明优先解释`

  • 黄缘   2013/12/02

    我猜第一个,undefined,第二个,1,第三个,返回函数体,4,3,5,不知道

  • undefined
    1
    undefined 实际是函数体
    10
    null 实际是[object Window]

    • sd   2014/05/12

      第一题相当于:
      var a = 1; // 属性声明被提到前面.
      if(!("a" in window)) { // 因为被提, 所以属性a早于这个if语句存在
      a = 1; // 这里永远得不到执行.
      }
      alert(a); // undefined

      第二题相当于:
      fucntion a(x) {...} // 函数声明比一般属性声明的优先级更高, 被提到最前.
      var a = 1; // 变量a不再指向上面的函数, 但上面的函数还存在.
      var b = 上面的函数;
      alert(a); // 变量a储存的是1, b存储的是函数对象指针.

      第三题相当于:
      function a() {....}
      var a; // 对于已经存在的属性, 只声明不赋值不会产生效果. js会忽略这语句
      alert(a) // a还是指向函数对象 而不是undefined..

      第四题:
      函数对象的arguments对象是动态的, 改变参数的值会跟着变. 反过来也可以用它来改变参数的值.
      arguments[2]和a是一体的, 共享修改结果.

      第五题:
      原理不清楚, 但既然是改变this的指针, 首先传入的得是一个对象.
      所以方法内部应该会有判断, 如果不是, 或者不能转为对象. this的指针不会改变.
      null 和 undefined 不算真正的对象, 所以不会改变this的值..
      而this默认指向window

      • sd   2014/05/12

        第一题写急了, 应该是这样:
        var a; // 属性声明被提到前面(属性赋值还留在原地..);
        if(!(“a” in window)) { // 因为被提, 所以属性a早于这个if语句存在
        a = 1; // 这里永远得不到执行.
        }

跳到底部
返回顶部