`
longzhun
  • 浏览: 371973 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JS-函数,重载.

 
阅读更多
如果函数无明确的返回值,或调用了没有参数的return 语句,那么它真正返回的值是: undefined.

JS无重载:
重载,就是同时存在两个名称相同的函数,但它们的接收参数不同或返回值不同;在JAVA中经常会遇到.但在JS中,如果同时存在两个相同的名字的函数,它不会引发错误,但它会真正使用最后一个;如:
function doit(iNum){
    alert(iNum + 100);
}
function doit(iNum){
    alert(iNum + 10);
}
我们执行:doit(10)时,它会alert出20;因为第二个覆盖了第一个定义.要想实现重载,必须使用下面的:argument

arguments 对象

在函数中,我们可以直接使用arguments对象,它是一个对象,但访问方式和数组一样:arguments[0]...,arguments.length;等;如:
function sayHi(){
    if(arguments[0] == "bye"){
        return;
    }
    alert(arguments[0]);
}
还可以用arguments.length来查看函数当前接收的参数的个数,如:
function howManyArgs(){
    alert(arguments[0].length);
}
howManyArgs("a",4);    //alert 2
howManyArgs();         //alert 0
howManyArgs(33);       //alert 1

从上面的代码又可以看出:
ECMAScript不会验证传递给函数的参数个数是否等于函数定义的参数个数.开发者定义的函数都可以接受任意个数的参数,最多能接受25个,而且不会引发任何错误.任何遗漏的参数都会以undefined传递给函数,多俄的参数将被忽略.

用 arguments 模拟重载:
function doit(){
    if(arguments.length == 1){
        alert(arguments[0] + 10);
    }else if(arguments.length == 2){
        alert(arguments[0] + arguments[1]);
    }
}

Function 类
我们用的函数,它实际上也是一个类;我们声明一个函数,就相当于创建了一个Function类的实例;Function类实例化的格式是:var funcName = new Function(arg1,arg2,....argN,functionBody);如
我们声明函数的时候用:
function funcName(arg1,arg2){
    alert(arg1 + arg2);
}
这种格式来声明,但它实际上的含义是:
var funcName = new Function("arg1","arg2","alert(\"arg1\" + \"arg2\")");
但这种方式书写不方便,但让我们理解了Function类的存在.
记得上面说JS无重载的时候举的例子:
function doit(iNum){
    alert(iNum + 100);
}
function doit(iNum){
    alert(iNum + 10);
}
它实际上的内容是:
doit = new Function("iNum","alert(iNum + 100)");
doit = new Function("iNum","alert(iNum + 10)");
这样看起来就很容易理解为什么后面的会把前面的覆盖了.
因为Function也是一个对象,而声明的时候实际上是将该对象的指针给了函数名.所以可以将多个指针指向同一个Function.如:
var doit = new Function("iNum","alert(iNum + 10)");
var alsoDo = doit;
doit(11);
alsoDo(11);
两者效果一样;
既然知道了函数名实际上是一个对象的指针,那么我们就可以将函数名传递给其他函数,并做调用;如:
function callAnotherFunc(fnFunc,vArgs){
    fnFunc(vArgs);
}
doit = new Function("iNum","alert(iNum + 10)");
callAnotherFunc(doit,10);
Function类还提供了另外一个接口:length属性,用来返回该类声明的接收参数的长度;如:
function doit(iNum){alert(iNum + 10)}
function hello(){alert("hello");}
alert(doit.length);     //alert 1
alert(hello.length);    //alert 0
分享到:
评论

相关推荐

    xpack-v1.0.2.zip

    在现代软件开发中,JSON(JavaScript Object Notation)已经成为数据交换的主要格式之一,它简洁且易于人类阅读,同时也易于机器解析和生成。对于C++开发者而言,高效地处理JSON数据是一项重要的技能。"xpack-v1.0.2...

    kotlin-metadata,.zip

    Kotlin是一种现代、静态类型的编程语言,主要针对Java虚拟机(JVM)设计,但也支持JavaScript和Native平台。"kotlin-metadata"库是Kotlin生态系统中的一个重要组成部分,它专门用于处理Kotlin编译器生成的元数据。元...

    node-v6.5.0-win-x64.zip

    2. **ES6支持增强**:在这一版本中,Node.js对ECMAScript 2015(也称为ES6)的特性支持进一步加强,包括Promise、箭头函数、类、模板字符串等,这使得开发者能更好地利用现代JavaScript语法编写代码。 3. **模块...

    JavaScript常用函数列表

    以上列举的JavaScript函数涵盖了从用户交互到页面管理、数学运算、字符串操作以及浏览器信息获取等多个方面,是开发网页应用时不可或缺的工具集。掌握这些函数的使用方法,对于提升网页的交互性和功能性具有重要意义...

    Java软件中级工程师笔试题-复杂逻辑.docx

    这些题目涵盖了Java的基础语法,包括运算符优先级、字符串连接、方法重载、日期处理、数学函数以及继承和方法覆盖等核心概念。理解并掌握这些知识点对于成为一名合格的Java软件中级工程师至关重要。

    11.Webpack面试真题-59页.pdf

    - **示例**:在`module-a.js`文件中,通过IIFE(立即执行函数表达式)的方式定义了一个模块,其中包含了`method1`方法,并将其暴露给全局对象`window`。 ### 模块热替换(Hot Module Replacement, HMR) #### 1. HMR...

    scala-docs-2.11.8.rar

    2.11.x 版本支持JVM(Java虚拟机)和JS(JavaScript)平台,这使得开发者可以在服务器端和客户端应用中统一使用 Scala 代码。 **一、Scala核心概念** 1. **类型系统**:Scala的强类型系统允许静态类型检查,确保...

    vue-date-picker-master.zip

    Vue.js 是一款非常流行的前端JavaScript框架,用于构建用户界面。Vue Date Picker 是基于 Vue.js 的一个组件库,它提供了一个方便、可自定义的日历选择器,用于处理日期选择功能。在"vue-date-picker-master.zip"这...

    jquery.unobtrusive-ajax.rar

    6. **兼容性**:jQuery Unobtrusive Ajax与jQuery库无缝集成,因此可以利用jQuery提供的各种便利函数和选择器。 使用jQuery Unobtrusive Ajax,开发者可以快速地构建动态、响应式的Web应用,提供更好的用户体验。...

    happy-shopping-mall-master.zip

    在这个项目中,你可能能看到许多Vue.js的特性,比如单文件组件(Single File Components, SFCs)、计算属性、指令、生命周期钩子函数等。 Vue.js 的生态系统也非常丰富,包括Vuex用于状态管理,Vue Router用于路由...

    vue-data-board.7z

    Vue.js 是一个流行的前端JavaScript框架,由尤雨溪开发,用于构建用户界面。它以其简单易学、灵活性高和性能优良而备受开发者喜爱。在"vue-data-board.7z"这个压缩包中,我们很可能是得到了一个基于Vue.js的数据可视...

    vuejs-202.6948.36.zip

    Vue.js 是一款非常流行的前端JavaScript框架,由尤雨溪(Evan You)开发,用于构建用户界面。在“vuejs-202.6948.36.zip”这个压缩包中,我们可以预见到包含的是Vue.js的特定版本,可能是源代码、文档或者示例项目。...

    react-demos-master.zip

    - React组件是用JavaScript函数或类来定义的,可以接收props(属性)作为输入,并返回React元素描述应该在屏幕上看到什么。 - 使用`React.createElement()`或JSX创建元素,然后在组件中返回这些元素。 4. **状态...

    NASAL语言教程-完整版.pdf

    - 第六章深入探讨了函数的概念,包括函数的声明、参数、返回值、嵌套、重载以及命名参数的调用和代码简化技巧。 - 第七章介绍了面向对象程序设计在NASAL中的应用,包括类的定义、构造函数、析构函数、继承、虚变量、...

    npm-ext-react-gen.zip

    npm(Node Package Manager)是Node.js的包管理器,用于安装、管理和分发JavaScript库和工具。 `ext-react-gen`工具是为了简化React组件开发流程而设计的。它通常会生成基础的文件结构和代码模板,帮助开发者快速...

    react-native-boilerplate-master.rar

    4. **热重载**: React Native支持热重载功能,允许开发者在不重启应用的情况下实时查看代码更改。这极大地提高了开发效率。 5. **Redux或MobX状态管理**: 在boilerplate中,可能预装了如Redux或MobX这样的状态管理...

    《使用Java实现面向对象编程》阶段测试-笔试试卷.doc

    在《使用Java实现面向对象编程》的阶段测试中,主要...以上内容涵盖了Java面向对象编程中的核心概念,包括常量声明、方法重载、构造函数、封装以及this关键字的使用。理解并掌握这些知识点对于学习Java编程至关重要。

    .Principles.of.Object-Oriented.Programming.in.JavaScript

    - **参数与重载**:讨论函数参数的使用方法以及如何实现方法重载。 - **对象方法**:介绍如何在对象中定义和使用方法。 #### 第三章:理解对象 这一章节深入探讨了JavaScript中对象的核心概念: - **属性定义**:...

    iview-project-3.0.zip

    8. **webpack.config.js**: Webpack 配置文件,用于处理项目打包构建过程中的各种设置,如模块加载、代码分割、热重载等。 通过这个项目,开发者可以学习到如何利用 Vue.js 2.x 和 iView 3.0 构建前端应用,包括...

    一个基于vue开发的零售商城项目示例,采用了vux-UI框架.zip

    Vue.js是一个轻量级、高性能的JavaScript库,专为构建用户界面而设计,尤其适合单页应用程序(SPA)。Vux UI则是一个针对移动设备的Vue组件库,提供了丰富的预设组件,如按钮、表单、网格系统等,以帮助开发者快速...

Global site tag (gtag.js) - Google Analytics