JS匿名函数内部this指向问题详析


Posted in Javascript onMay 10, 2019

前言

网上看到一句话,匿名函数的执行是具有全局性的,那怎么具有的全局性呢?

this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象

1.案例中,第一个say打出来的是Alan,而第二个则是window

var name = 'window'
 var person = {
 name :'Alan',
 sayOne:function () {
  console.log(this.name)
 },
 sayTwo:function () {
  return function () {
  console.log(this.name)
  }
 }
 }
 person.sayOne()//Alan
 person.sayTwo()() // window

2.原因

  1. 函数内部的this指向调用者
  2. sayOne调用者是person对象,所以this指向person;
  3. sayTwo的调用者虽然也是person对象,但是区别在于这次调用并没有打出this而是在全局返回了一个匿名函数
  4. 而这个匿名函数不是作为某个对象的方法来调用执行,是在全局执行

3.我们也可以更改this指向,这里应用JS高级编程的案例

var name = "global";

var foo = {
 name: "foo",
 getName : function(){
 console.log(this.name);
 }
}

var bar = {
 name: "bar",
 getName : function(){
 return (function(){
  console.log(this.name);
 })();
 }
}

foo.getName(); //foo
foo.getName.call(bar); //bar
foo.getName.call(this); //global
foo.getName.call(window); //global

(function(){

 console.log(this.name)

}.bind(bar))(); //bar

(function(){

 console.log(this.name)

}.bind())(); //global

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
做网页的一些技巧
Feb 01 Javascript
JavaScript打印iframe内容示例代码
Aug 20 Javascript
文本框倒叙输入让输入框的焦点始终在最开始的位置
Sep 01 Javascript
使表格的标题列可左右拉伸jquery插件封装
Nov 24 Javascript
JavaScript用构造函数如何获取变量的类型名
Dec 23 Javascript
从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
Apr 13 Javascript
微信小程序中input标签详解及简单实例
May 18 Javascript
js注册时输入合法性验证方法
Oct 21 Javascript
Vue+Flask实现简单的登录验证跳转的示例代码
Jan 13 Javascript
浅谈FastClick 填坑及源码解析
Mar 02 Javascript
详解js获取video任意时间的画面截图
Apr 17 Javascript
解决Vue watch里调用方法的坑
Nov 07 Javascript
详解关于React-Router4.0跳转不置顶解决方案
May 10 #Javascript
Vue使用watch监听一个对象中的属性的实现方法
May 10 #Javascript
微信小程序获取用户信息并保存登录状态详解
May 10 #Javascript
jsonp实现百度下拉框功能的方法分析
May 10 #Javascript
微信小程序用户授权,以及判断登录是否过期的方法
May 10 #Javascript
利用es6 new.target来对模拟抽象类的方法
May 10 #Javascript
Angular4.0动画操作实例详解
May 10 #Javascript
You might like
用PHP和ACCESS写聊天室(六)
2006/10/09 PHP
解析PHP实现下载文件的两种方法
2013/07/05 PHP
如何使用“PHP” 彩蛋进行敏感信息获取
2013/08/07 PHP
PHP模糊查询的实现方法(推荐)
2016/09/06 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
2017/02/08 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
2017/02/28 PHP
PHP经典实用正则表达式小结
2017/05/04 PHP
搭建自己的PHP MVC框架详解
2017/08/16 PHP
php自动加载代码实例详解
2021/02/26 PHP
自写的一个jQuery圆角插件
2010/10/26 Javascript
javascript tips提示框组件实现代码
2010/11/19 Javascript
简单方法判断JavaScript对象为null或者属性为空
2014/09/26 Javascript
JavaScript中Textarea滚动条不能拖动的解决方法
2015/12/15 Javascript
js右下角弹出提示框示例代码
2016/01/12 Javascript
jQuery使用ajax跨域获取数据的简单实例
2016/05/18 Javascript
Bootstrap Table服务器分页与在线编辑应用总结
2016/08/08 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
2017/01/10 Javascript
JavaScript中.min.js和.js文件的区别讲解
2019/02/13 Javascript
vue实现微信分享链接添加动态参数的方法
2019/04/29 Javascript
NodeJs crypto加密制作token的实现代码
2019/11/15 NodeJs
javascript执行上下文、变量对象实例分析
2020/04/25 Javascript
详解Python进程间通信之命名管道
2017/08/28 Python
python处理csv数据动态显示曲线实例代码
2018/01/23 Python
python3利用ctypes传入一个字符串类型的列表方法
2019/02/12 Python
numpy数组广播的机制
2019/07/12 Python
HTML5的postMessage的使用手册
2018/12/19 HTML / CSS
Mio Skincare法国官网:身体紧致及孕期身体护理
2018/04/04 全球购物
北美女性服装零售连锁店:maurices
2019/06/12 全球购物
卡拉威高尔夫官方网站:Callaway Golf
2020/09/16 全球购物
外贸公司实习自我鉴定
2013/09/24 职场文书
环保倡议书
2014/04/14 职场文书
出差报告怎么写
2014/11/06 职场文书
中标通知书
2015/04/17 职场文书
2016年社区植树节活动总结
2016/03/16 职场文书
Python还能这么玩之用Python修改了班花的开机密码
2021/06/04 Python
python绘制云雨图raincloud plot
2022/08/05 Python