现在的位置: 首页 > javascript > 正文
一个问题的思考
2013年06月06日 javascript ⁄ 共 632字 评论数 4 ⁄ 被围观 4,503 views+

最近无意中看到一个人发的js问题截图。看起来挺有意思的,发出来大家讨论下,并附上个人的理解。方便大家交流。问题1问题2

这些问题是对初看起来觉得比较复杂。自己分析下,也不是那么难。顺便复习一下。
先看第一个问题,当代码执行e()时。执行第一句f.call(e),相当于e.f(),执行完后e就多一个属性a和一个方法b,即e.a='A',继续往下执行下一句alert(a),因为a没有定义,外层也没有a的定义,而JS中不允许直接使用未声明的变量。所以这段代码会报错。

再看第二个问题,这个问题和第一个问题唯一不一样的地方就是f.call(e.t),很明显的是e.t这个东西不存在,所以值为undifined,而js中f.call(undefined)或f.call(null)相当于window.f(),所以执行完后,window会多出一个属性a,window.a='A'和一个方法b,往下执行下一句,在e中没有a这个属性,但在顶层作用域中即window有a这个属性,所以就弹出了A

再看第三个问题吧,和第一个不同的地方也在f.call(y.t),错误同第一个,因为使用了未声明的变量y,所以报错。

再看第四个问题吧,根据第一个问题的分析,执行完f.call(e)这个之后,e.a='A'。所以这个弹出A。

主要复习一下几点:
1.call方法的参数是undefined或null时相当于window调用。
2.javascript不能直接使用未声明的变量。
3.javascript的查找顺序

目前有 4 条留言 其中:访客:2 条, 博主:2 条


  1. 管理员
    世纪之光 : 2013年06月14日21:31:14  -49楼 @回复 回复

    关键点应该在总结的第一点:“call方法的参数是undefined或null时相当于window调用。”。

  2. 戈多 : 2013年06月18日10:49:39  -48楼 @回复 回复

    关键点应该在总结的第一点:“call方法的参数是undefined或null时相当于window调用。”。 确实是这点值得关注

  3. 司马唐迁 : 2013年06月25日17:22:56  -47楼 @回复 回复

    http://zhidao.baidu.com/question/540737532?&oldq=1

    博主说的是这个问题?


    • 管理员
      世纪之光 : 2013年06月26日09:11:09  地下1层 @回复 回复

      应该是指这个问题,这篇文章的解释也应该是正确的。

给我留言

留言无头像?


×