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)的更多相关文章

  1. 前端JS面试题汇总 Part 2 (null与undefined/闭包/foreach与map/匿名函数/代码组织)

    原文:https://github.com/yangshun/front-end-interview-handbook/blob/master/questions/javascript-questio ...

  2. 在PHP中如何为匿名函数指定this?

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

  3. 匿名函数中undefined形参疑问(转载)

    唉,基本功不扎实,昨天在微博上问了个问题,就匿名函数中undefined形参,不知道是干什么用的. 经常看到这样的匿名函数代码: ;(function( $, window, document,und ...

  4. underScore学习1:匿名函数中call(this)的作用

    匿名函数中(function(){}).call(this) 中的.call(this) 有什么用? 我们都知道,.call()可以改变函数执行时的context,即this的指向,源码中的.call ...

  5. Java中的lambda匿名函数使用

    Java中的lambda匿名函数使用 lambda匿名函数的使用是为了满足某些情况下需要临时定义函数,或者事先定义,需要时才使用.在python里面,lambda表达式的表达方式为:lambda 参数 ...

  6. 通过取父级for循环的i来理解闭包,iife,匿名函数

    在使用for循环的时候,假如需要在循环体中添加一个匿名函数处理其他的事情,那么,在这个匿名函数内,如果需要用到对应的i,因为闭包的缘故,循环体循环结束后才返回i,所以i最终为最后一次++的数值.   ...

  7. JavaScript 闭包系列二(匿名函数及函数的闭包)

    一. 匿名函数 1. 函数的定义,可分为三种 1) 函数声明方式 function double(x) {     return 2*x; } 2)Function构造函数,把参数列表和函数体都作为字 ...

  8. js 函数中的 return+匿名函数

    今天一个刚学js的朋友给了我一段代码问为什么方法不执行,代码如下: 代码如下: function makefunc(x) {  return function (){   return x;  } } ...

  9. js中在一个函数中引用另一个函数中的函数,可以这么做

    在另一个函数中,将需要使用的函数绑定在window下 // UEditor $(function () { window.ue = UE.getEditor('editor', { // ue即可成为 ...

随机推荐

  1. ZOJ 1654 Place the Robots(放置机器人)------最大独立集

    Place the Robots http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1654 Time Limit: 5 Sec ...

  2. 深入解析开源项目之Universal-Image-Loader(二)内存---缓存篇

    珍惜作者劳动成果,如需转载,请注明出处. http://blog.csdn.net/zhengzechuan91/article/details/50292871 Universal-Image-Lo ...

  3. 64。node.js 中间件express-session使用详解

    转自:http://jinjiakarl.com/2018/06/09/node-js-%E4%B8%AD%E9%97%B4%E4%BB%B6express-session%E4%BD%BF%E7%9 ...

  4. HTML标签大全(常用)

    转自:https://www.cnblogs.com/moije/p/6751624.html 文本标记语言,即HTML(Hypertext Markup Language),是用于描述网页文档的一种 ...

  5. class的写法

    java中class的写法:1.public class xxx{}2.非public类:public class A{}public class B{}必须保证一个其中一个类名是public并与ja ...

  6. js--基于面向对象的组件开发及案例

    组件的开发:多组对象之间想兄弟关系一样,代码复用的形式. 问题:1).参数不写会报错:利用对象复制————配置参数和默认惨啊书的覆盖关系(逻辑或也可以)2).参数特别多时会出现顺序问题:json解决 ...

  7. poj3244(公式题)

    Difference between Triplets Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 2476   Acce ...

  8. 内存卡(TF或其它)的标准

    内存卡(TF或其它)的标准 来源 https://zh.wikipedia.org/wiki/SDXC 一般的内存卡是SD2.0的规范的,就是 Class10(10M/sec)或低于 Class10 ...

  9. iPad之Linux平台实践

    updata.... 本文出自 "李晨光原创技术博客" 博客,谢绝转载!

  10. 关于Webpack详述系列文章 (第四篇)

    1. webpack基本概念 Entry:入口,Webpack 执行构建的第一步将从 Entry 开始,可抽象成输入.Module:模块,在 Webpack 里一切皆模块,一个模块对应着一个文件.We ...