你的位置:首页 > Java教程

[Java教程]javascript之观码说理


前一阶段看到大神在网上贴出的测试个人js理解的代码。

在此我在此借用大神的代码,进行自我复述,大神文章参见:http://www.imooc.com/article/1731

代码1:

function foo(){  console.log(this.a);}function doFoo(fn){  fn();}function doFoo2(o){  o.foo();}var obj = {  a: 2,  foo: foo};var a = "I'm an a";doFoo(obj.foo);doFoo2(obj);


 

我的理解:

先说doFoo(obj.foo)

传入的参数obj.foo即对象obj的元素foo,内容为foo。

此时传入的foo在方法doFoo中就变成了调用foo()方法。

因为foo()是定义在最外层的,此时的this指向最外层对象window,所以取得的a应该是在最外层定义的 var a = "I'm an a";。

所以第一个方法返回的是I'm an a。

 

其次说doFoo2(obj)

传入的参数是obj对象.

此时在doFoo2中调用的是obj.foo()。

这时foo()方法中的this重新指向了obj对象,所以this.a取得的是obj对象中的a。

所以第二个方法返回的是2.

 

大神的分析:

在Javascript中,this指向函数 执行时的当前对象,而非声明环境有
执行doFoo的时候执行环境就是doFoo函数,执行环境为全局。
执行doFoo2时是在对象内部调用函数,this指针指向该对象。

 

代码2:

function foo(somthing){  console.log(this.a, somthing);}function bind(fn, obj){  return function(){    return fn.apply(obj, arguments);  }}var obj = {  a:2}var bar = bind(foo, obj);var b = bar(3);console.log(b);


未完待续