arguments 是函数运行时的实参列表(对象),每个函数都有自己的 arguments,但不往外层函数寻找 arguments 的相关属性,即不行成链(只有 OA 形成作用域链)。

例1

  1. <script>
  2. (function(d, e, f){
  3. console.log(arguments);
  4. console.log(typeof arguments);
  5. })('javascript','programming','!');
  6. </script>

console 中输出

  1. ["javascript", "programming", "!"]
  2. object

例2 arguments 收集了所有的实参,即使没有相对应的形参

  1. <script>
  2. (function(d, e, f){
  3. console.log(arguments);
  4. })('javascript','programming','!','node');
  5. </script>

console 中输出

  1. ["javascript", "programming", "!", "node"]

当一个函数运行的时候,函数内部能引用的变量有 ① AO ② arguments ③ this

例3 形参与对应的 arguments 单元是相互映射的

  1. <script>
  2. (function(d, e, f){
  3. console.log(arguments[0]);
  4. arguments[0] = 'backbone';
  5. console.log(d);
  6. })('javascript','programming','!','node');
  7. </script>

console 中输出

  1. javascript
  2. backbone

例4 arguments 在函数运行时获取实参的个数

  1. <script>
  2. (function(d, e, f){
  3. console.log(arguments.length);
  4. })('javascript','programming','!');
  5. </script>

console 中输出:3

【arguments.callee 属性】当前运行的函数

例5

  1. <script>
  2. (function(d, e, f){
  3. console.log(arguments.callee);
  4. })('javascript','programming','!');
  5. </script>

console 输出:

  1. function (d, e, f){
  2. console.log(arguments.callee);
  3. }

例6

使用递归求和

  1. <script>
  2. function t(n){
  3. if(n<=1){
  4. return n;
  5. }else{
  6. return n + t(n-1);
  7. }
  8. }
  9. console.log(t(100));
  10. </script>

输出:5050

现在使用匿名函数完成递归

  1. <script>
  2. console.log(
  3. (function (n){
  4. if(n<=1){
  5. return n;
  6. }else{
  7. return n + arguments.callee(n-1);
  8. }
  9. })(100)
  10. );
  11. </script>

输出:5050

Javascript 笔记与总结(1-3)arguments的更多相关文章

  1. [Effective JavaScript 笔记]第3章:使用函数--个人总结

    前言 这一章把平时会用到,但不会深究的知识点,分开细化地讲解了.里面很多内容在高3等基础内容里,也有很多讲到.但由于本身书籍的篇幅较大,很容易忽视对应的小知识点.这章里的许多小提示都很有帮助,特别是在 ...

  2. [Effective JavaScript 笔记] 第4条:原始类型优于封闭对象

    js有5种原始值类型:布尔值.数字.字符串.null和undefined. 用typeof检测一下: typeof true; //"boolean" typeof 2; //&q ...

  3. [Effective JavaScript 笔记] 第5条:避免对混合类型使用==运算符

    “1.0e0”=={valueOf:function(){return true;}} 是值是多少? 这两个完全不同的值使用==运算符是相等的.为什么呢?请看<[Effective JavaSc ...

  4. [Effective JavaScript 笔记]第27条:使用闭包而不是字符串来封装代码

    函数是一种将代码作为数据结构存储的便利方式,代码之后可以被执行.这使得富有表现力的高阶函数抽象如map和forEach成为可能.它也是js异步I/O方法的核心.与此同时,也可以将代码表示为字符串的形式 ...

  5. [Effective JavaScript 笔记]第28条:不要信赖函数对象的toString方法

    js函数有一个非凡的特性,即将其源代码重现为字符串的能力. (function(x){ return x+1 }).toString();//"function (x){ return x+ ...

  6. 从头开始学JavaScript 笔记(一)——基础中的基础

    原文:从头开始学JavaScript 笔记(一)--基础中的基础 概要:javascript的组成. 各个组成部分的作用 . 一.javascript的组成   javascript   ECMASc ...

  7. 【原】javascript笔记之Array方法forEach&map&filter&some&every&reduce&reduceRight

    做前端有多年了,看过不少技术文章,学了新的技术,但更新迭代快的大前端,庞大的知识库,很多学过就忘记了,特别在项目紧急的条件下,哪怕心中隐隐约约有学过一个方法,但会下意识的使用旧的方法去解决,多年前ES ...

  8. JavaScript笔记目录

    JavaScript笔记目录 一.JavaScript简介 二.在HTML中使用JavaScript ...持续更新中,敬请期待

  9. 蛋糕仙人的javascript笔记

    蛋糕仙人的javascript笔记:https://www.w3cschool.cn/kesyi/kesyi-nqej24rv.html

  10. JavaScript笔记(第一章,第二章)

    JavaScript笔记(第一章,第二章) 第一章: <meta http-equiv="Content-Type" content="text/html; cha ...

随机推荐

  1. Linux C 知识 char型数字转换为int型 int型 转换为Char

    前言 在九度oj做acm的时候,经常会遇到了char类型和int类型相互转化的问题,这里进行一下总结.今后,可能会多次更新博客,因为半年做了很多总结,但是都是保存在word文档上了,现在开始慢慢向CS ...

  2. Asp.net MVC中提交集合对象,实现Model绑定(转载)

    Asp.net MVC中的Model自动绑定功能,方便了我们对于request中的数据的处理, 从客户端的请求数据,自动地以Action方法参数的形式呈现.有时候我们的Action方法中想要接收数组类 ...

  3. Webservice加上SoapHeader验证方式

    提供一种基于SoapHeader的自定义验证方式,代码如下: public class MySoapHeader : System.Web.Services.Protocols.SoapHeader ...

  4. oracle DBA坚持写博客的7大理由

    对于Oracle DBA来说,甚至IT技术人员来说.坚持写博客是个好习惯.以下是我建议大家写博客的七个理由. 帮助整理思路 最近我做出了一个决定,那就是: 我要坚持天天写博客,记录每天所学的重要东西. ...

  5. WCF例子

    WCF入门简单教程(图文) VS2010版 http://hi.baidu.com/grayworm/item/5bb61792fec5b54af142159f http://hi.baidu.com ...

  6. POJ3264Balanced Lineup 线段树练手

    题目意思:给定Q(1<=Q<=200000)个数A1,A2,```,AQ,多次求任一区间Ai-Aj中最大数和最小数的差 #include <iostream> #include ...

  7. Spring的meta标签

    Spring的解析源码 public void parseMetaElements(Element ele, BeanMetadataAttributeAccessor attributeAccess ...

  8. 配置JDKAndroid 2D游戏引擎AndEngine

    配置JDKAndroid 2D游戏引擎AndEngine JDK全称为Java Development Kit(也即Java开发包),是用于支持Java 编程的基础.无论是什么编程,只要用到了Java ...

  9. json学习系列(8)JSON与JAVA数据的相互转换实例

    一.完整案例 先定义一个java实体对象,如下: package com.pcitc.json.cnblog; /** * SimInfo实体对象 * * @Description * @author ...

  10. LIS HDOJ 1257 最少拦截系统

    题目传送门 题意:中文题面 分析:LIS模板题:n - 最长下降子序列 -> 最长上升子序列 贪心做法以后再补:) 代码: #include <cstdio> #include &l ...