相关阅读:https://segmentfault.com/a/1190000015438195

相关阅读: https://zhuanlan.zhihu.com/p/23804247

相关阅读: https://blog.csdn.net/qq20004604/article/details/53328724

函数内部有两个特殊的对象:this与arguments

【this】this引用的是函数执行的环境对象

(1) 作为对象属性被调用

此时,this指向调用该函数的对象obj

(2) 作为普通函数被调用

  此时,this指向全局作用域,非严格模式下this指向window,严格模式下this指向undefined

(3) 作为构造函数被调用

  此时,this指的就是将要被new出来的新对象

(4) call()、apply()、bind()的应用 —— 作用:扩充作用域,优点在于方法与对象不需要任何耦合关系!

每个函数都包含两个非继承而来的方法call()与apply(),这两个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值。

此外,ES5中还定义了一个bind()方法。

【apply()方法】接受两个参数,一个是在其中运行函数的作用域(即this),另一个是参数数组

【call()方法】接受多个参数,第一个也是this,其余参数直接传递该函数,而非放到一个数组中传递给call()

【bind()方法】用于将当前函数和指定对象绑定,返回一个新的函数,当新函数被调用时,代码会在指定对象的上下文中执行。

【arguments】 其中arguments是一个数组类对象,包含传入函数的所有参数。

虽然arguments的主要用途是保存函数参数,

但是这个对象还有一个名叫【callee】的属性,该属性是一个指针,指向拥有这个arguments对象的函数。 表示引用当前正在执行的函数,或者说是调用arguments.callee的函数对象的引用,它给匿名函数提供了一种自我引用的方式。

(1) 这个属性只有在函数执行时才有效   

(2) 它有一个length属性,可以用来获得形参的个数,因此可以用来比较形参和实参个数是否一致,即比较arguments.length是否等于arguments.callee.length   

(3) 它可以用来递归匿名函数。

ES5中也规范化了另一个函数对象属性【caller】,这个属性中保存着调用当前函数的函数的引用,如果是在全局作用域中调用当前函数,它的值为null

(1) 这个属性只有当函数在执行时才有用   

(2) 如果在javascript程序中,函数是由顶层调用的,则返回null

函数中的this与argument对象,以及argument中的callee与caller属性的更多相关文章

  1. 原生js中获取this与鼠标对象以及vue中默认的鼠标对象参数

    1.通过原生js获取this对象 <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...

  2. python: 面向对象:类和对象调用类中的变量和方法

    一. 面向对象初识 我们在生活中做事都是面向过程的,前面实现一些基本逻辑功能代码也是用面向过程的语句实现的,后来学了函数,把这些功能又装到了函数里.但用面向过程的方法去写程序,只能实现一个功能,我们要 ...

  3. JVM运行时数据区及对象在内存中初始化的过程

    JVM运行时数据区 Java虚拟机所管理的内存区域,也称为运行时数据区,分为以下几个运行时数据区,如图所示 程序计数器:当前程序所执行字节码的行号指示器 程序计数器(Program Counter R ...

  4. Spring中获取被代理的对象

    目录 Spring中获取被代理的对象 获取Spring被代理对象什么时候可能会用到? Spring中获取被代理的对象 Spring中获取被代理的对象 ### 获取Spring被代理对象的JAVA工具类 ...

  5. ZeroMQ接口函数之 :zmq_msg_init_data - 从一个指定的存储空间中初始化一个ZMQ消息对象的数据

    ZeroMQ 官方地址 :http://api.zeromq.org/4-1:zmq_msg_init_data zmq_msg_init_data(3) ØMQ Manual - ØMQ/3.2.5 ...

  6. js高级程序设计书中,有一句话在全局作用域中定义的函数实际上只 能被某个对象调用???

    js没有块级作用域(题外话:函数可以作为一个块级),所以我们经常使用闭包来模拟块级作用域,以避免变量或者函数因为名称相同而产生的冲突. 重点来了: 所以,如果我们把哪个变量或者函数放在全局作用域中,那 ...

  7. 详细解读-this-关键字在全局、函数、对象、jQuery中的基础用法!

    一.前言 1. Javascript是一门基于对象的动态语言,也就是说,所有东西都是对象,一个很典型的例子就是函数也被视为普通的对象.Javascript可以通过一定的设计模式来实现面向对象的编程,其 ...

  8. 关于跨进程使用回调函数的研究:以跨进程获取Richedit中RTF流为例(在Delphi 初始化每一个TWinControl 对象时,将会在窗体 的属性(PropData)中加入一些标志,DLL的HInstance的值与HOST 进程的HInstance并不一致)

    建议先参考我上次写的博文跨进程获取Richedit中Text: 获得QQ聊天输入框中的内容 拿到这个问题,我习惯性地会从VCL内核开始分析.找到TRichEdit声明的单元,分析TRichEdit保存 ...

  9. 《挑战30天C++入门极限》C++中利用构造函数与无名对象简化运算符重载函数

        C++中利用构造函数与无名对象简化运算符重载函数 在完整描述思想之前,我们先看一下如下的例子,这个例子中的加运算符重载是以非成员函数的方式出现的: //程序作者:管宁  //站点:www.cn ...

随机推荐

  1. Asp.Net Core在CentOS部署与注意

    部署具体步骤参考:将ASP.NET Core应用程序部署至生产环境中(CentOS7) 1.wwwroot是放静态文件的,Startup的配置里面要app.UseStaticFiles(); 2.在不 ...

  2. Servlet_note

    2015/8/24 Web项目目录结构:总目录my,中有WEB-INF目录,中有classes.lib两目录和web.xml文件.classes保存编译好的java文件,lib保存库文件,web.xm ...

  3. powdesingner 更新数据库表结构

    1.连接数据库 2更新数据库表结构

  4. 关于elementui表单数字校验踩坑记

    需求:1.输入类型是数字.2.数字大小有限制.3.非必填 做法: <el-form-item label="熟悉程度" prop="averageCaseRunTi ...

  5. 小tips:JS的Truthy和Falsy(真值与假值)

    前言 Truthy 不等于 ture,他是指是在Boolean上下文中转换后的值为真的值.我的理解是,在javascript中所有表达式为true的值.同理Falsy指的是在javascript中所有 ...

  6. python docx文档转html页面

    文章链接:https://mp.weixin.qq.com/s/uMb2ziRS1NJ1GXIjofeANg 说到word文档转html的,网上一搜一大把,各种在线word转html页面,使用起来也方 ...

  7. Dart语言入门(一)

    Dart 语言介绍 Dart 是谷歌在 2011 年推出的编程语言,是一种结构化 Web 编程语言,允许用户通过 Chromium 中所整合的虚拟机(Dart VM)直接运行 Dart 语言编写的程序 ...

  8. kotlin 第一个Android项目

    一.创建过程 二.TextView点击事件 class MainActivity : AppCompatActivity() { lateinit var tv:TextView; //初始化Text ...

  9. android---EventBus的简单使用(一)

    是什么: 就是用来发消息通信的 怎么用: 定义事件:(消息体) public class MessageEvent { /* Additional fields if needed */ } 准备订阅 ...

  10. qt生成二维码

    到官网下载qrencode http://fukuchi.org/works/qrencode/index.html.en qrenc.c不用,这个是测试用的,把config.h.in文件改为conf ...