JavaScript基本语法及参数问题(1)

基本语法:

function name(arg0,arg1,arg2){ statements} (注意没有;)

function sayHi(name,mes) {
    console.log("hello "+name+","+mes );
}

// 调用函数,形参变为实参
sayHi("solin","you are a superhero");


函数在定义时候,不必指定是否含有返回值,实际上在ECMAScript中任何函数在任何时候都可以通过return语句来实现返回值;


function sum(num1,num2) {
    return num1+num2;
}

console.log(sum(2,3));

输出为:5;

注意!位于return之后的代码永远不会执行!

所以希望某些代码不执行的时候,可以直接在前加return;及之后的代码永远不会执行.

推荐让函数永远有返回值或者永远没有,方便进行调试.



---------

关于参数

!ES中不介意传递多少个参数,也不介意参数的数据类型,理由是ES中内部参数是用数组表示的,直接可以通过arguments[]来进行访问参数.

重写第一段代码,输出结果也是一样的

function sayHi() {
    console.log("hello "+arguments[0]+","+arguments[1]);
}

// 调用函数,形参变为实参
sayHi("solin","you are a superhero");

name,mes称之为标识符.

可以通过arguments.length来获取参数个数;

{console.log(arguments.length)};

();=>0    (12)=>1    ("string",1)=>2

当然参数对象和命名对象在es中也是不冲突的.


再看下面的代码

function doAdd(num1,num2) {
    arguments[1]=10;
    console.log(arguments[0]+num2);

}

doAdd(10,5);

输出结构为20,即会重写num2的值, 因为arguments[1]修改了,所以num2也进行了修改.

但是!他们并没有访问相同的内存空间.内存空间独立,值同步!

如果我们把赋值该等等于号呢?

显然是15,函数内部>命名参数




再看

function doAdd(num1,num2) {
    arguments[1]=10;
    console.log(arguments[0]+num2);

}

doAdd(10);

如果只传入一个参数10,则返回NaN,undefined,因为arguments的长度是有传入参数决定的,而不是定义函数命名参数决定的(num1,num2). 没有传值得参数自动命名为undefined.

我们必须知道 es中参数传递就是值,按值传递,不能通过引用传递参数.

最后,参数没有重载,同名函数后定义覆盖前定义.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值