arguments 是什么?

是一个对象,一个 很像数组的对象

arguments内容是什么?

1是函数运行时的实参列表

2收到实参收集起来,放到一个arguments对象里

在词法分析中,首先按形参形成AO的属性,值为undefined

当实参传来时,再修改AO的相应属性

t(a,b,c){};

调用时:t(1,2,3,4,5)个参数,

此时AO属性有a,b,c三个属性,arguments里有1,2,3,4,5所有的值

对于超出形参个数之外的实参,可以通过arguments来获得

3arguments的索引从0,1,2递增,与实参对应

4arguments.length属性代表实参的个数

5arguments一定不是数组,是长得比较像数组的一个对象,虽然也有length属性

6arguments每个函数都会有,因此,arguments只会在内部找自身的arguments,无法引用外部的arguments

(function(d,e,f){
                //在此函数内,无法用d,e,f形参来取得“haha”,因为没有与之相应的形参
                //但我们可以用arguments来获取任意多个的实参
                
                console.log(arguments[3]);

})("Hello","world","?","haha");

(function(d,e,f){
                alert(typeof arguments);
            })("Hello","world","?");          //object

callee与caller

caller返回一个函数的引用,这个函数调用了当前的函数;callee放回正在执行的函数本身的引用,它是arguments的一个属性

caller
caller返回一个函数的引用,这个函数调用了当前的函数。
使用这个属性要注意:
1 这个属性只有当函数在执行时才有用
2 如果在javascript程序中,函数是由顶层调用的,则返回null

functionName.caller: functionName是当前正在执行的函数。

  1. var a = function() {
  2. alert(a.caller);
  3. }
  4. var b = function() {
  5. a();
  6. }
  7. b();

上面的代码中,b调用了a,那么a.caller返回的是b的引用,结果如下:

  1. var b = function() {
  2. a();
  3. }

如果直接调用a(即a在任何函数中被调用,也就是顶层调用),返回null:

  1. var a = function() {
  2. alert(a.caller);
  3. }
  4. var b = function() {
  5. a();
  6. }
  7. //b();
  8. a();

输出结果:

null

callee
callee放回正在执行的函数本身的引用,它是arguments的一个属性
使用callee时要注意:
1 这个属性只有在函数执行时才有效
2 它有一个length属性,可以用来获得形参的个数,因此可以用来比较形参和实参个数是否一致,即比较arguments.length是否等于arguments.callee.length
3 它可以用来递归匿名函数。

  1. var a = function() {
  2. alert(arguments.callee);
  3. }
  4. var b = function() {
  5. a();
  6. }
  7. b();

a在b中被调用,但是它返回了a本身的引用,结果如下:

    1. var a = function() {
    2. alert(arguments.callee);
    3. }

arguments详解的更多相关文章

  1. JavaScript中的arguments详解

    1. arguments arguments不是真正的数组,它是一个实参对象,每个实参对象都包含以数字为索引的一组元素以及length属性. (function () { console.log(ar ...

  2. Javascript arguments详解

    今天我们来看看arguments对象及属性.arguments对象不能显式创建,arguments对象只有函数开始时才可用.函数的 arguments 对象并不是一个数组,访问单个参数的方式与访问数组 ...

  3. js 类数组arguments详解

    arguments并不是一个真正的数组,而是一个"类似数组(array-like)"的对象: 就像下面的这段输出,就是典型的类数组对象: [, , callee: ƒ, Symbo ...

  4. js中arguments详解

    在js中一切都是对象,连函数也是对象,函数名其实是引用函数定义对象的变量. 什么是arguments? 这个函数体内的arguments非常特殊,实际上是所在函数的一个内置类数组对象,可以用数组的[i ...

  5. arguments详解——函数内命名参数之映射

    首先,arguments对象是所有(非箭头)函数中都可用的局部变量.你可以使用arguments对象在函数中引用函数的参数.此对象包含传递给函数的每个参数,第一个参数在索引0处. arguments对 ...

  6. javascript 函数详解2 -- arguments

    今天我们接着上篇文章来继续javascript函数这个主题.今天要讲的是函数对像中一个很重要的属性--arguments. 相关阅读: javascript 函数详解1 -- 概述 javascrip ...

  7. Android消息传递之EventBus 3.0使用详解

    前言: 前面两篇不仅学习了子线程与UI主线程之间的通信方式,也学习了如何实现组件之间通信,基于前面的知识我们今天来分析一下EventBus是如何管理事件总线的,EventBus到底是不是最佳方案?学习 ...

  8. Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    转载:http://freeloda.blog.51cto.com/2033581/1288553 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负 ...

  9. JavaScript事件详解-jQuery的事件实现(三)

    正文 本文所涉及到的jQuery版本是3.1.1,可以在压缩包中找到event模块.该篇算是阅读笔记,jQuery代码太长.... Dean Edward的addEvent.js 相对于zepto的e ...

随机推荐

  1. Java多线程系列 JUC线程池07 线程池原理解析(六)

     关闭“线程池” shutdown()的源码如下: public void shutdown() { final ReentrantLock mainLock = this.mainLock; // ...

  2. [原创]java WEB学习笔记27:深入理解面向接口编程

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  3. 【leetcode刷题笔记】Longest Substring Without Repeating Characters

    Given a string, find the length of the longest substring without repeating characters. For example, ...

  4. 【leetcode刷题笔记】Best Time to Buy and Sell Stock II

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  5. 新手用的git配置命令

    新手用的git配置命令 /**第一次链接远程仓库 本地已有项目需要上传码云 */ //1.配置码云用户名 git config --global user.name "昵称" // ...

  6. hihocoder 第五十二周 高斯消元·二【高斯消元解异或方程 难点【模板】】

    题目地址:http://hihocoder.com/contest/hiho57/problem/1 输入 第1..5行:1个长度为6的字符串,表示该行的格子状态,1表示该格子是亮着的,0表示该格子是 ...

  7. The Great Pan

                                             The Great Pan Time Limit:1000MS     Memory Limit:65536KB    ...

  8. 最短路N题Tram SPFA

     #include <algorithm>#include <queue>#include <cstdio>#include <cstdlib>#inc ...

  9. 暑假集训第一周比赛G题

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=83146#problem/G G - 向 Crawling in process... C ...

  10. Base64Util工具类

    package com.qianmi.weidian.common.util; import java.io.*; /** * This class provides encode/decode fo ...