匿名函数

在函数表达式中,创建一个函数并将它赋值给一个变量,若此时function关键字后没有标识符,那么创建的函数可称为匿名函数

匿名函数中的this指向

在一般情况下,this对象是在运行时基于函数的执行环境绑定的。若是在全局函数中,则this指向window;当函数被作为某个对象的方法调用时,this指向该对象。但是在匿名函数中,因为匿名函数的执行环境具有全局性,所以它的this一般指向window。

var name = "The Window";var object = {name : "My Object",//var that=this; //可以更改this指向,使之指向当前的object对象getNameFunc : function(){return function(){return this.name;};}};alert(object.getNameFunc()());  // 输出为  The Window“”

上面的代码中,getNameFunc()函数中返回的是匿名函数,匿名函数中的this指向的是window,因此输出的是全局变量the window。
为什么?因为object.getNameFunc()()可以拆解如下

var  f = object.getNameFunc(); //返回的是一个匿名函数;f(); //相当于调用了该匿名函数,此时的调用者是window对象。所以this会指向window

如果想要匿名函数的this能够执行当前的object对象,那么就要更改this。可以在匿名函数外添加一行:var that=this----即更改this的指向,更改this的指向还可以用call、apply、bind,输出代码改为下面这行即可将this指向更改指向object对象。call、apply、bind是有区别的,共同点是可以改变执行环境上下文且第一个参数都是指定的对象,不同点:1.apply的第二个参数是数组,这一点和call和bind不一样,call和bind可以传递多个参数。2.bind()返回了改变了执行上下文环境的函数但是不会立即执行该函数,而call()和apply()会直接执行该函数。

alert(object.getNameFunc().call(object));  //输出 “my object”
alert(object.getNameFunc().apply(object));

利用bind方法,bind(object)()

alert(object.getNameFunc().bind(object)());

事例如下:
下述为一个匿名自执行函数,诚如所知,函数名实际上只是一个指向函数对象的指针,对于匿名函数而言,没有函数名。将匿名函数用一对圆括号包含表示是一个函数表达式(如:(function() {}),而后面的 () 表示调用

var a=2;
(function() {var a=3;return this.a;
})()       //输出为 2,this指向的是window

匿名函数的this指向相关推荐

  1. 匿名函数的this指向为什么是window?

    以下是知乎上的两个回答,分别从宏观和微观的角度分析这个原因. 1.微观角度 作者:franky 链接:https://www.zhihu.com/question/21958425/answer/19 ...

  2. 匿名函数、普通函数、箭头函数作用域

    匿名函数 /*************************************** * 匿名函数的this指向具有全局性 * 当this在函数内找不到时,会去全局查找 /*********** ...

  3. 箭头函数 改变this指向

    1.箭头函数 <div>我是div</div><script>const oDiv = document.querySelector('div');// 普通函数o ...

  4. Python day10 global关键字、函数递归、匿名函数、map函数的用法详解

    1.global关键字 引用全局变量,在局部全局变量改变,也会改变,global相当于指针,将地址指向全局变量的name name='littlepage'def littepage():global ...

  5. Go 学习笔记(16)— 函数(02)[函数签名、有名函数、匿名函数、调用匿名函数、匿名函数赋值给变量、匿名函数做回调函数]

    1. 函数签名 函数类型也叫做函数签名,可以使用 fmt.Printf("%T") 格式化参数打印函数类型. package mainimport "fmt"f ...

  6. Javascript匿名函数

    ü  定义 匿名函数的定义非常简单:就是没有名字的函数.但是其用途非常的大 ü  典型的函数定义方式 在看匿名函数之前我们先看下在Javascript中定义一个函数比较典型的几种方式 函数声明 fun ...

  7. 在NewLisp中实现匿名函数的递归

    2019独角兽企业重金招聘Python工程师标准>>> 匿名函数在很多语言中的表现形式大概如下: (lambda (n)(* (+ n 1) (- n 1))) 只有参数列表和函数体 ...

  8. 【转】js之匿名函数

    这篇博文内容来自于javascript高级程序设计第2版,向作者致敬 函数声明: function functionName(arg0,arg1){ //函数体 } 函数表达式: var functi ...

  9. 委托、lamda表达式..委托概念-匿名函数-泛型委托-Lamda表达式-多播委托

    委托 一.什么是委托? 将一个方法作为参数传递给另一个方法(参数类型为委托delegate).   声明一个委托类型. 委托所指向的函数必须跟委托具有相同的的签名(参数个数.参数类型.返回值一样). ...

  10. php7 $this-,在PHP中如何为匿名函数指定this?

    在之前的文章中,我们已经学习过匿名函数的使用,没有看过的小伙伴可以进入传送门先去了解下闭包匿名函数的用法,传送:还不知道PHP有闭包?那你真OUT了. 关于闭包匿名函数,在JS中有个很典型的问题就是要 ...

最新文章

  1. mysql_rollback_MySQL的rollback--事务回滚
  2. 【普及组模拟赛】家族
  3. 使用Java 8流遍历递归数据结构
  4. hashmap 扩容是元素还是数组_HashMap 中的容量与扩容实现
  5. matlab 图像语义分割,笔记︱图像语义分割(FCN、CRF、MRF)、论文延伸(Pixel Objectness、)...
  6. 将List集合用字符串,逗号隔开进行拼接 ,五种方法
  7. Cocos2dx游戏开发系列笔记3:牛刀小试-忍者飞镖射幽灵的Demo
  8. 阿里云数据库再添新成员,企业级MariaDB正式开卖!
  9. CODE[VS]1160 蛇形矩阵
  10. 【课本】【No.4】数字特征 离散/连续均值/方差 随机向量 协方差 相关系数 矩 偏度 峰度 多维均值/协方差 运算性质 条件期望 随机个随机向量的和 正态中的条件期望是线性函数
  11. 关系抽取;串联抽取和联合抽取论文总结
  12. C++学习笔记(七)——log4cpp
  13. 合唱队——最少出列人数
  14. 淘宝天猫各平台APP端页面详情api接口调用
  15. input输入框去除历史记录
  16. Druid 索引服务的资源精细化调度
  17. 如何基于ARMS快速实现一个基于Nginx的网站监控场景 – 操作篇
  18. poj 2579 Blurred Vision
  19. matlab画cca的图,Canoco5绘制漂亮的DCA或CCA图
  20. blackberry 下载地址

热门文章

  1. 华为交换机导入配置_华为交换机配置文件备份与还原
  2. python实现多表合并_python实现excel多表合并的方法
  3. Linux 配置Host
  4. word压缩图片怎么弄_教大家WORD插入图片如何批量压缩图片
  5. 唐朝疆域地图[中亚势力范围(公元660年
  6. 【破解三网】iphone5 国行 A1429
  7. 2008年IT产业38个判断(转载)
  8. pdf转换成jpg python_Python 将pdf转成图片
  9. java俄罗斯方块旋转_java俄罗斯方块旋转算法,求解
  10. 2019年电赛D题简易电路特性测试仪试题ad5933测量小阻抗值