一个简单的例子,看明白this
2017-11-01 13:08
197 查看
这里有一段简单的代码,
大意的人一定会脱口而出这两个函数的执行结果是一样的,
其实这两个函数执行的结果是不一样的,虽然他们调用的是同一个方法,但是在这里this的指向已经发生了变化
fn.obj()返回的是123,fn1()返回的是321;
我们都知道this的指向是在调用到它的时候才会知道指向哪里,并不是在词法阶段就明确了的;
fn.obj()调用的时候,this的上下文绑定的还只是fn这个对象,属于直接调用;
当把fn.obj赋值给变量fn1后,调用fn1()虽然执行的函数是同一个,但是这时的this上下文就变成了变量fn1,这个全局变量
这时的this.a指向的也是全局变量a,因此会返回321
function obj(){ console.log(this.a); } var fn= {a:123,obj:obj}; var a= 321; var fn1= fn.obj; fn.obj(); fn1();
大意的人一定会脱口而出这两个函数的执行结果是一样的,
其实这两个函数执行的结果是不一样的,虽然他们调用的是同一个方法,但是在这里this的指向已经发生了变化
fn.obj()返回的是123,fn1()返回的是321;
我们都知道this的指向是在调用到它的时候才会知道指向哪里,并不是在词法阶段就明确了的;
fn.obj()调用的时候,this的上下文绑定的还只是fn这个对象,属于直接调用;
当把fn.obj赋值给变量fn1后,调用fn1()虽然执行的函数是同一个,但是这时的this上下文就变成了变量fn1,这个全局变量
这时的this.a指向的也是全局变量a,因此会返回321
相关文章推荐
- 一个简单的小例子让你明白c#中的委托-终于懂了!
- 一个简单的小例子让你明白c#中的委托
- 一个简单的例子教你明白XMLHTTPRequest的原理
- 一个简单的例子看明白如何利用window.location.hash实现ajax操作时浏览器的前进/后退功能
- 一个简单的例子看明白如何利用window.location.hash实现ajax操作时浏览器的前进/后退功能
- 使用Eclipse开发一个Servlet3.0的简单例子
- 一个简单继承的例子,面试失败的教训
- js 排列 组合 的一个简单例子
- Appium+Robotframework实现Android应用的自动化测试-6:一个简单的例子
- 中级JavaScript例子, 如何实现一个简单实用的模板套用机制, GXTemplate , 第一章(估计要写9章)
- struts2入门-第一个例子==》第一个struts2实例——HelloWorld==》Struts2.0搭建和简单实例==>写一个Steuts2的经典入门案例,做了一个登陆程序作为入门例子
- enum枚举类的一个简单例子
- 一个最最简单的Ajax例子
- 【性能跟踪】btrace学习二--btrace一个简单例子
- 一个简单例子理解C#的协变和逆变
- 一个简单的C#多线程间同步的例子
- 一个简单的依赖倒置/依赖注入(Dependency Injection)的例子
- 一个简单的Ajax例子
- Flex中如何使用WebService类调用一个简单web service的例子
- 一个Flex鼠标拖拽图片的简单例子(附源码)