您的位置:首页 > Web前端 > JavaScript

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

2018-03-29 19:34 190 查看
基本语法:
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中参数传递就是值,按值传递,不能通过引用传递参数.
最后,参数没有重载,同名函数后定义覆盖前定义.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: