`

js 函数定义和调用

    博客分类:
  • js
 
阅读更多

参考:js教程 函数定义和调用

 

定义函数

在JavaScript中,定义函数的方式如下:

function abs(x) {
    if (x >= 0) {
        return x;
    } else {
        return -x;
    }
}

第二种定义函数的方式如下:

var abs = function (x) {
    if (x >= 0) {
        return x;
    } else {
        return -x;
    }
};

调用函数

要避免收到undefined,可以对参数进行检查:

function abs(x) {
    if (typeof x !== 'number') {
        throw 'Not a number';
    }
    if (x >= 0) {
        return x;
    } else {
        return -x;
    }
}

arguments

利用arguments,你可以获得调用者传入的所有参数。也就是说,即使函数不定义任何参数,还是可以拿到参数的值:

function abs() {
    if (arguments.length === 0) {
        return 0;
    }
    var x = arguments[0];
    return x >= 0 ? x : -x;
}

abs(); // 0
abs(10); // 10
abs(-9); // 9

实际上arguments最常用于判断传入参数的个数。你可能会看到这样的写法:

// foo(a[, b], c)
// 接收2~3个参数,b是可选参数,如果只传2个参数,b默认为null:
function foo(a, b, c) {
    if (arguments.length === 2) {
        // 实际拿到的参数是a和b,c为undefined
        c = b; // 把b赋给c
        b = null; // b变为默认值
    }
    // ...
}

要把中间的参数b变为“可选”参数,就只能通过arguments判断,然后重新调整参数并赋值。

rest参数

function foo(a, b, ...rest) {
    console.log('a = ' + a);
    console.log('b = ' + b);
    console.log(rest);
}

foo(1, 2, 3, 4, 5);
// 结果:
// a = 1
// b = 2
// Array [ 3, 4, 5 ]

foo(1);
// 结果:
// a = 1
// b = undefined
// Array []

rest参数只能写在最后,前面用...标识,从运行结果可知,传入的参数先绑定ab,多余的参数以数组形式交给变量rest,所以,不再需要arguments我们就获取了全部参数。

如果传入的参数连正常定义的参数都没填满,也不要紧,rest参数会接收一个空数组(注意不是undefined)。

 

 

小心你的return语句

前面我们讲到了JavaScript引擎有一个在行末自动添加分号的机制,这可能让你栽到return语句的一个大坑:

function foo() {
    return { name: 'foo' };
}

foo(); // { name: 'foo' }

如果把return语句拆成两行:

function foo() {
    return
        { name: 'foo' };
}

foo(); // undefined

要小心了,由于JavaScript引擎在行末自动添加分号的机制,上面的代码实际上变成了:

function foo() {
    return; // 自动添加了分号,相当于return undefined;
        { name: 'foo' }; // 这行语句已经没法执行到了
}

所以正确的多行写法是:

function foo() {
    return { // 这里不会自动加分号,因为{表示语句尚未结束
        name: 'foo'
    };
}

 

 

分享到:
评论

相关推荐

    JavaScript 函数的定义-调用、注意事项

    函数定义 函数语句定义 function(a,b){ return a+b; } 表达式定义 var add = function(a,b){return a+b}; //函数表达式可以包含名称,这在递归时很有用 var f = function fact(x){ if(x<=1) {return 1; }else ...

    jsp中调用js中的一个函数,函数传参的问题

    NULL 博文链接:https://youzhibing.iteye.com/blog/2166047

    JavaScript程序设计课件:函数的调用方式.pptx

    当函数定义完成后,要想在程序中发挥函数的作用,必须得调用这个函数。 函数的调用非常简单,只需引用函数名,并传入相应的参数即可。 函数声明与调用的编写顺序不分前后。 5.2.2 函数的调用方式 2、函数的调用方式 ...

    一个Js文件函数中调用另一个Js文件函数的方法演示

    而b()中又要调用a.js文件中的方法a()。若要实现这个功能,必须注意,将要引入的Js文件代码放在</body>下面。  首先,我们在html中引入b.js,并在</body>之后加入引用语句。如下: <html>

    javascript函数

    本章的重点是用户定义的JavaScript函数的定义和调用。另外还有一点比较重要,即JavaScript支持很多内部的函数,诸如类Array的方法eval()、parseInt()和sort()等。客户端JavaScript还定义了其他函数,如document....

    javaScript函数式编程

    全书共9章,分别介绍了JavaScript函数式编程、一等函数与Applicative编程、变量的作用域和闭包、高阶函数、由函数构建函数、递归、纯度和不变性以及更改政策、基于流的编程、类编程。除此之外,附录中还介绍了更多...

    JS函数的定义与调用方法推荐

    JS函数调用的四种方法:方法调用模式,函数调用模式,构造器调用模式,apply,call调用模式 1. 方法调用模式: 先定义一个对象,然后在对象的属性中定义方法,通过myobject.property来执行方法,this即指当前的my...

    Chromium web browser,js可调用c#函数,用 .net 2.0封装的CEF

    .net封装有cef.glue和cefsharp两个开源产品比较有名。cefsharp是用c++结合c#写的dll库,cef.glue是用纯c#invoke winapi的方式实现的. Cef.glue 官网下载的代码是.net 4.5的,没有js c#交互的演示代码。这个代码是做了...

    JavaScript 函数调用规则

    JavaScript函数调用规则一 (1)全局函数调用: function makeArray( arg1, arg2 ){ return [this , arg1 , arg2 ]; } 这是一个最常用的定义函数方式。相信学习JavaScript的人对它的调用并不陌生。 调用代码如下: ...

    JavaScript函数定义方法实例详解

    本文实例讲述了JavaScript函数定义方法。分享给大家供大家参考,具体如下: JavaScript 函数定义方法 函数声明 在之前的教程中,你已经了解了函数声明的语法 : function functionName(parameters) { 执行的代码 } ...

    matlab虚线图代码-callGraph:一种多语言工具,用于解析函数定义和调用的源代码

    matlab点点图代码用于解析函数定义和调用的源代码的多语言工具 调用图显示了函数在程序中如何相互调用。 每个椭圆代表一个函数,每个箭头表示一个函数调用。 在下图中,主程序由节点 MAIN 表示。 它调用 6 个函数,...

    JavaScript函数定义的常见注意事项小结

    本文就javascript函数定义的常见问题进行了总结。包含了初学者常犯的错误。分享给大家供大家参考。具体总结如下: 1. 函数声明的同时JS引擎还定义了一个与函数名同名的变量,我们在调用这个函数的时候实际上是在使用...

    JavaScript程序设计课件:匿名函数.pptx

    概念:所谓函数表达式指的是将声明的函数赋值给一个变量,通过变量完成函数的调用和参数的传递,它也是JavaScript中另一种实现自定义函数的方式。 5.5 匿名函数 函数表达式 var fn = function sum(num1, num2) { ...

    浅谈js中子页面父页面方法 变量相互调用

    (1)子页面调用父页面的方法或者变量: window.parent.方法()或者变量名 window.parent相当于定位到父页面 之后的操作和在父页面中写代码一样写 window.parent.aa();//调取aa函数 window.parent.bb;//调取bb变量 ...

    JavaScript函数-深入解析与使用指南(很详细)

    1.本文将深入探讨JavaScript函数的基本原理、特点,并通过多个示例展示函数的使用流程和步骤。读者将学习到如何定义函数、编写函数体、调用函数以及处理返回值。此外,文章还将对函数的参数、作用域以及闭包等高级...

    Javascript基础教程之定义和调用函数

    主要介绍了Javascript基础教程之定义和调用函数的相关资料,需要的朋友可以参考下

    js代码-函数调用的传值和传址

    js代码-函数调用的传值和传址

    JS匿名函数、闭包

    匿名函数,也称为拉姆达函数,是一种使用JavaScript函数的强大方式。以下总结了匿名函数的特点: 任何函数表达式从技术上说都是匿名函数,因为没有引用它们的确定的方式; 在无法确定如何引用函数的情况下,递归...

    Javascript中匿名函数的多种调用方式总结

    Javascript中定义函数的方式有多种,函数直接量就是其中一种。如var fun = function(){},这里function如果不赋值给fun那么它就是一个匿名函数。好,看看匿名函数的如何被调用。 方式1,调用函数,得到返回值。强制...

Global site tag (gtag.js) - Google Analytics