最详细的JS学习笔记(连载)第二章、函数(arguments)

2024-06-12 00:36

本文主要是介绍最详细的JS学习笔记(连载)第二章、函数(arguments),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

函数属性arguments

(1)高阶函数

高阶函数:所谓高阶函数就是操作函数的函数,它接收一个或多个函数作为参数,并返回新函数

参数arguments 函数内置的实参集合

  1. 、类数组集合,集合中存着所有函数执行时,传递实参的信息。
  2. 、不论有没有设置形参,arguments都会存在。
  3. 、不论有没有传递形参,arguments都会存在

当函数被调用时,会得到一个免费奉送的参数数组,那就是arguments数组。通过它,函数可以访问所有它被调用时传递给他的参数列表。这使得编写一个无需指定参数个数的函数成为可能。

    var sum = function(){

        var i ,sum =0;

        for(i = 0;i<arguments.length;i+=1){

            sum+=arguments[i];

        }

        return sum;

    };

    document.writeln(sum(4,5,23,13,35,46,-10));//116

在ECMAScript中的参数在内部是用一个数组来表示的,函数接收到的始终都是这个数组,而不关心数组中包含哪些参数

function add(num1,num2){

    num = num1 + num2;

    return num;

}

var result = 12,count = 20;

alert(add(result,count));       //32;命名的参数只提供便利,解析器不会验证命名参数

实际上,arguments并不是一个真正的数组,它只是一个类数组的对象,它拥有一个length属性,但他缺少所有数组的方法。另外,arguments对象的长度是由传入的参数个数决定的,而不是由定义函数时的命名参数的个数决定的

函数在定义或者声明的时候,所有的参数都是形参,因此,我们可以根据实际情况来命名参数,函数也只有在被调用时才会传入实参。而每个函数在被调用时都会自动取得两个特殊变量:this 和 arguments

(2) arguments

1)作用

1.在js中函数定义没有任何参数,调用该函数时可以传递任意参数!

2.arguments对象是类数组对象。

3.arguments对象的length属性:获取函数的实参个数!

4.利用arguments对象特性,实现模拟函数的重载的效果.

找出数组的最大值

var x=findMax(1,123,500,115,44,88);

function findMax(){

    var i,max=0;

    for(i=0;i<arguments.length;i++){

       if(arguments[i]>max){

           max=arguments[i];

}

}

return max;

}

计算数组中的值的和

var x=findMax(1,123,500,115,44,88);

function sumAll(){

    var i,sum=0;

    for(i=0;i<arguments.length;i++){

       sum+=arguments[i];

}

return sum;

}

2)arguments 是函数内置(天生自带的)接收参数的机制

(1)是一个函数内置的接收参数的集合,arguments获取的是一个类数组。
(2)有一个叫做length的属性:arguments.length获取传递参数的个数以数字作为索引,索引从0开始逐级的递增,索引代表第几个传递进来的参数值arguments[0] 第一个参数值  arguments[1] 第二个参数值  arguments[索引] 第索引+1个参数值。

function fn(){

    var total=0;

    for(var i=0; i<argument.length;i++){

    var   cur=argument[i];

    total+=cur;

}

console.log(total);

}

3)自己独有的属性:callee  指向当前正在执行的函数。  arguments.callee代表的是函数本身

function foo(x,y,z){

    console.log(arguments.length);     //2

    console.log(arguments[0]);     //1

    arguments[0]=10;

    console.log(x);                //有绑定关系,形参x被修改为10

    arguments[2]=100;              //z未传入

    console.log(z);             //没有绑定关系,z仍然是undefined

    console.log(arguments.callee===foo);      //true,严格模式禁止使用

}

foo(1,2);

console.log(foo.length);    //3

console.log(foo.name);          //"foo"

好处:使得编写一个无须指定参数个数的函数成为可能。

foo.length拿到形参的个数。在函数内和函数外都有效。foo.length===arguments.callee.length

arguments.length拿到实际传参的个数。

arguments.callee当前正在执行的函数

foo.name拿到函数名。

坑:尝试通过arguments[2]=100修改未传入的z的值,z还是undefined。就是说:参数如果没传进来的话,arguments和参数没有改下修改这样的绑定关系。

5、函数的递归

callee是arguments对象的一个属性。它可以用于引用该函数的函数体内当前正在执行的函数。

函数的递归,即一个函数在通过名字调用自身的情况下构成的:

通过使用argument.callee代替函数名://arguments.callee是一个指向正在执行的函数的指针

    function factorial(num){

        if(num<=1){

            return 1;

        }else{

            return num*arguments.callee(num-1);

        }

    }


本人是以网络视频与网络文章的方式自学的,并按自己理解的方式总结了学习笔记。有不正确之处请各位高手多多指点,一起学习进步。【VX:czlingyun    暗号:CSDN】

这篇关于最详细的JS学习笔记(连载)第二章、函数(arguments)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1052695

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

Java中HashMap的用法详细介绍

《Java中HashMap的用法详细介绍》JavaHashMap是一种高效的数据结构,用于存储键值对,它是基于哈希表实现的,提供快速的插入、删除和查找操作,:本文主要介绍Java中HashMap... 目录一.HashMap1.基本概念2.底层数据结构:3.HashCode和equals方法为什么重写Has

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级