javascript中的call

时间:13-06-18 栏目:Javascript 作者:zongyan86 评论:0 点击: 2,992 次

如图所示的问题:

这些问题是对初看起来觉得比较复杂。大家乍看之下,是不是有点懵懵的。

————————————————————————————————————————————————————————————

先看第一个问题,当代码执行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的查找顺序


原文参考:http://www.easyui.info/archives/1347.html


web开发分享



声明: 本文由( zongyan86 )原创编译,转载请保留链接: javascript中的call

关注我们