箭头函数,闭包函数中的this指向
在javscript中,this 是在函数运行时自动生成的一个内部指针,它指向函数的调用者。
箭头函数有些不同,它的this是继承而来, 默认指向在定义它时所处的对象(宿主对象),而不是执行时的对象。
var name = "window";
var test = {
name:"demo",
// 传统函数
getName1: function(){
console.log(this.name); // demo
var that = this;
setTimeout(function(){
console.log(this.name); // window
console.log(that.name); // demo
},500)
}, // 箭头函数-作为异步回调
getName2:function(){
setTimeout(()=>{
console.log(this.name) // demo
},500)
}, // 箭头函数-作为直接执行的方法
getName3:()=>{
console.log(this.name) // window
}
};
如上getName3(),将箭头函数作为直接执行的方法来写时要特别小心,它的this会直接指向window。
我发现真是有趣
箭头函数this的指向就像人一出生下来就决定了的事情
出生时候爸爸所在的环境 = {
你的姓: "张",
出生:function() {
var 你的姓 = "3"
var 爸爸 = () => {
var 你的姓 = "2"
console.log(this.你的姓)} //这里面就是养你的爸爸所在的环境
return 爸爸
}
}
出生时候爸爸所在的环境.出生()()
VM1229:7 张
由上面可以总结出this的指向是在定义它时所处的对象
箭头函数不会创建自己的this,它只会从自己的作用域链的上一层继承this
总结
1.若调用者内部没有this指定的变量指 不会随作用域链向上查询。直接返回undefined
2.函数调用的时候有两张:作为函数调用 作为方法调用
作为方法调用: this指向为调用者 //闭包函数: 那么this指向全局,因为此时闭包中函数的调用作为函数调用
//箭头函数:箭头函数的调用,指向定义的位置对象所在的作用域。this是继承而来的
3.由于箭头函数没有自己的this指向,所以bind apply call无效
4.每个函数在调用的时候,其活动对象会自动获得两个特殊变量:arguments和this。内部搜索时。只会搜索到其活动对象为止,不会访问外部函数中这两个变量
箭头函数,闭包函数中的this指向的更多相关文章
- 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数
[源码下载] 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数 作者:webabcd 介绍速战速决 之 PHP 函数基础 函数参数 函 ...
- php里面用魔术方法和匿名函数闭包函数动态的给类里面添加方法
1.认识 __set (在给不可访问属性赋值时,__set() 会被调用) 也就是说你再访问一个类里面没有的属性,会出发这个方法 class A{ private $aa = '11'; publ ...
- python 函数--闭包函数
一.闭包函数: 在一个外函数中定义一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用. 二.实例: def outer(a): #外函数 b = 10 #临时变量 def i ...
- python 内嵌函数, 闭包, 函数装饰器
一. 函数内嵌 闭包 在python中,函数可以作为返回值, 可以给变量赋值. 在python中, 内置函数必须被显示的调用, 否则不会执行. #!/usr/bin/env python #-*- ...
- PHP函数(六)-匿名函数(闭包函数)
匿名函数能够临时创建一个没有名称的函数,常用作回调函数参数的值 <?php $test = function($a){ echo "Hello,".$a; }; $test( ...
- JavaScript闭包函数&箭头函数调用与执行
一.标准的闭包函数 //一.标准的闭包函数 function A() { var i=0; ++i; console.log('i : ' + i); return function b() { re ...
- 浅谈python中的闭包函数
闭包函数初探 通常我们定义函数都是这样定义的 def foo(): pass 其实在函数式编程中,函数里面还可以嵌套函数,如下面这样 def foo(): print("hello worl ...
- PHP 中的闭包函数和匿名函数
闭包函数 闭包函数通常作为函数中的函数使用. <?php $foo = function($s) { echo $s; }; $foo('hello'); <?php function t ...
- Swift语法基础入门三(函数, 闭包)
Swift语法基础入门三(函数, 闭包) 函数: 函数是用来完成特定任务的独立的代码块.你给一个函数起一个合适的名字,用来标识函数做什么,并且当函数需要执行的时候,这个名字会被用于“调用”函数 格式: ...
- 10-Python入门学习-函数的对象与嵌套、名称空间与作用域、闭包函数
一.函数的对象 函数是第一类对象,指的是函数名指向的值(函数)可以被当作数据去使用 def func():# func=函数的内地址 print('from func') print(func) ag ...
随机推荐
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-share
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- LeetCode#3 - 无重复字符的最长字串(滑动窗口)
题目: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例: abcabcbb 输出的结果应该是3,最长的无重复的字串是'abc' 果然无论做什么都要静下心来啊!昨晚上卡了一个多小 ...
- CGridCtrl显示子控件 及事件
m_Grid.SetCellType(row, , RUNTIME_CLASS(CGridCell)); m_Grid.SetItemText(row, , _T(")); m_Grid.S ...
- Egret Engine 2D - 项目配置
todo 看三个示例项目的完整源码和资源 <e:Group name="Button" height = "300" verticalCent ...
- 22 ~ express ~ 内容评论实现
1,使用 ajax 提交评论内容 给 api.js 2,数据库 contents 增加评论字段 3,后台路由 api.js 接收并完成存储 /** 增加评论(用户,内容,时间) */ router.p ...
- pyCharm中设置查看运行过程中的变量实时情况
1.点击运行栏的这个灰色向下剪头: 2.单击“Edit Configurations”, 3.在出现的窗口上,勾选上:“Show command line afterwards” 或 “run wit ...
- SQL笔记整理
- 备份mysql的批处理命令
需要工具mysqldump.exe的支持,安装mysql默认是带此工具的 批处理命令 set NOW_TIME_HH=%time:~0,2% if "%NOW_TIME_HH%" ...
- React之生命周期函数(16.3以后新版本)
学习链接: https://www.jianshu.com/p/514fe21b9914 学习链接:https://zhuanlan.zhihu.com/p/38030418 学习链接:https:/ ...
- POJ 1731:Orders
Orders Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9940 Accepted: 6048 Descriptio ...