js闭包中的this(匿名函数中的this指向的是windows)
js闭包中的this(匿名函数中的this指向的是windows)
一、总结
1、普通函数中的this指向的是对象,匿名函数中的this指向的是windows,和全局变量一样
2、让匿名函数中的this指向对象的两种方法
- 可以使用对象冒充强制改变this的指向
- 将this赋值给一个变量,闭包访问这个变量
二、js闭包中的this
闭包中的this问题
- 之前的课程中讲过this是在运行时基于函数的执行环境来绑定的
- 全局函数中的this是window,而当函数作为某个对象的方法调用时,this就是指的那个对象......
- 匿名函数的执行环境具有全局性,this通常是指向window的。
- 可以使用对象冒充强制改变this的指向
- 将this赋值给一个变量,闭包访问这个变量
三、代码
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="utf-8">
<title>课堂演示</title>
</head>
<body>
<script>
/*
var name='The Window';
var obj=new Object();
obj.name='my obj';
obj.get=function(){
return this.name;
} var obj={
name:'my obj',
get:function(){
return this.name;
}
}
alert(obj.get()) //返回 'my obj' var name='The Window';
var obj={
name:'my obj',
get:function(){
return function(){
return this.name;
}
}
} alert(obj.get()()) //这次返回的是全局变量 'The Window'
alert(obj.get().call(obj))//这次又返回的是'my obj',因为call()强制改变了this的指向
*/
var name='The Window';
var obj={
name:'my obj',
get:function(){
//这里的this指的是对象,这里为obj
var self=this
return function(){
//闭包里的this指的是window
return self.name;
}
}
} alert(obj.get()()) </script>
</body>
</html>
js闭包中的this(匿名函数中的this指向的是windows)的更多相关文章
- 前端JS面试题汇总 Part 2 (null与undefined/闭包/foreach与map/匿名函数/代码组织)
原文:https://github.com/yangshun/front-end-interview-handbook/blob/master/questions/javascript-questio ...
- 在PHP中如何为匿名函数指定this?
在之前的文章中,我们已经学习过匿名函数的使用,没有看过的小伙伴可以进入传送门先去了解下闭包匿名函数的用法,传送:还不知道PHP有闭包?那你真OUT了. 关于闭包匿名函数,在JS中有个很典型的问题就是要 ...
- 匿名函数中undefined形参疑问(转载)
唉,基本功不扎实,昨天在微博上问了个问题,就匿名函数中undefined形参,不知道是干什么用的. 经常看到这样的匿名函数代码: ;(function( $, window, document,und ...
- underScore学习1:匿名函数中call(this)的作用
匿名函数中(function(){}).call(this) 中的.call(this) 有什么用? 我们都知道,.call()可以改变函数执行时的context,即this的指向,源码中的.call ...
- Java中的lambda匿名函数使用
Java中的lambda匿名函数使用 lambda匿名函数的使用是为了满足某些情况下需要临时定义函数,或者事先定义,需要时才使用.在python里面,lambda表达式的表达方式为:lambda 参数 ...
- 通过取父级for循环的i来理解闭包,iife,匿名函数
在使用for循环的时候,假如需要在循环体中添加一个匿名函数处理其他的事情,那么,在这个匿名函数内,如果需要用到对应的i,因为闭包的缘故,循环体循环结束后才返回i,所以i最终为最后一次++的数值. ...
- JavaScript 闭包系列二(匿名函数及函数的闭包)
一. 匿名函数 1. 函数的定义,可分为三种 1) 函数声明方式 function double(x) { return 2*x; } 2)Function构造函数,把参数列表和函数体都作为字 ...
- js 函数中的 return+匿名函数
今天一个刚学js的朋友给了我一段代码问为什么方法不执行,代码如下: 代码如下: function makefunc(x) { return function (){ return x; } } ...
- js中在一个函数中引用另一个函数中的函数,可以这么做
在另一个函数中,将需要使用的函数绑定在window下 // UEditor $(function () { window.ue = UE.getEditor('editor', { // ue即可成为 ...
随机推荐
- Thinkphp5图片上传正常,音频和视频上传失败的原因及解决
Thinkphp5图片上传正常,音频和视频上传失败的原因及解决 一.总结 一句话总结:php中默认限制了上传文件的大小为2M,查找错误的时候百度,且根据错误提示来查找错误. 我的实际问题是: 我的表单 ...
- js --- 事件冒泡 事件捕获
先上结论: 他们是描述事件触发时序问题的术语.事件捕获指的是从document到触发事件的那个节点,即自上而下的去触发事件.相反的,事件冒泡是自下而上的去触发事件.绑定事件方法的第三个参数,就是控制事 ...
- POJ 2394 Dijkstra
题意: 思路: 裸的Dijkstra 爆敲一发模板 //By SiriusRen #include <queue> #include <cstdio> #include < ...
- 配置Lotus Domino集群视频详解
IBM Lotus Domino Server 有个最重要的高可用特新就是集群,它对于任何使用 Domino 服务器的组织,让用户能够持续访问它们的数据库,保证业务不间断运行.下面通过两个视频来学习如 ...
- EF中执行Sql语句
Entity Framework是微软出品的高级ORM框架,大多数.NET开发者对这个ORM框架应该不会陌生.本文主要罗列在.NET(ASP.NET/WINFORM)应用程序开发中使用Entity F ...
- css3+jq--小箭头旋转180度案例
html: <aside class="tea_getBtn"> <div class="w"> <span class=&quo ...
- MarkDown study:
#MarkDown study:## 区块元素:### 段落和换行 段落:由一个或多个连续的文本行组成,它的前后要有一个以上的空行(空行的定义是显示上看起来像是空的,便会被视为空行.比方说,若某一行只 ...
- LuoguP2762 太空飞行计划问题(最大权闭合子图,最小割)
题目描述 W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,…,Em},和进行这些实验需要使用的全部仪器的 ...
- tracepath---追踪并显示报文到达目的主机所经过的路由信息。
tracepath命令用来追踪并显示报文到达目的主机所经过的路由信息. 语法 tracepath(参数) 参数 目的主机:指定追踪路由信息的目的主机: 端口:指定使用的UDP端口号.
- 【MinGW】【C语言环境搭建】
问题 安装MinGW配置环境变量后终端输入gcc -v出错 解决 Win10下环境变量最后不用加分号