JavaScript函数初学心得

早过忘川 提交于 2020-03-02 11:36:12

JavaScript函数初学心得

1.JavaScript函数的声明
JavaScript函数的声明方式有俩种:
1.赋值式:先用var定义一个变量,把一个函数值直接赋值给这个变量
var f = function(){
console.log(1);
}
这种方式函数只能在声明之后调用,因为这种方式声明的函数,是在函数运行的阶段才赋值给变量f的。
2.声明式:使用function关键字来声明一个函数 ,不能漏掉函数名
function f(){
console.log(2);
}
这种方式在声明函数的作用域内任何地方调用,因为这种方式是咋解析阶段赋值给标识符f的。

:当同时使用这俩种方式声明一个函数时,最终执行的是赋值式声明的函数
代码如下:
// 赋值式表达式
var f = function() {
console.log(1);
}
// 声明式
function f (){
console.log(2);
}

f();// 1

2.JavaScript函数的传参
参数
参数分为实参和形参
形参:形参变量只有在被调用时才分配内存单元,在调用结束时, 即刻释放所分配的内存单元。因此,形参只有在函数内部有效。 函数调用结束返回主调函数后则不能再使用该形参变量。
实参:实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。
语法
function 函数名( 形参 ){
//代码块
}
函数名( 实参 );
也可以同时传递多个参数
function foo( name , age ){
//此时name的值为"张三" , age的值为24
}
foo( “张三” , 24 )

ECMAScript规范:ECMAScript中所有函数的参数都是按值传递的
但是,我们为了方便理解把它分为俩类:

1按值传递
function add(num) {
num += 10;
return num;
}
var count = 20;
var result = add(count); //按值传递 num = count
alert(count); // 20, 没变化
alert(result); // 30

2.按引用传递

function foo(obj) {
obj.name = “张三”;
}

    var person = new Object();
    foo(person);   //相当于按值传递  obj = person
    alert(person.name);   // "张三"

3.JavaScript函数的返回值return
当函数执行完的时候,并不是所有时候都要把结果打印。我们希望函数给我们一些反馈(比如计算的结果返回进行后续的运算),这个时候可以让函数返回一些东西。也就是返回值。函数通过return返回一个返回值。可以返回任意数据类型。

1.如果函数没有设置返回值那么函数会默认返回undifined
在这里插入图片描述

2.如果手动地设置了函数的返回值(return)后,函数将返回开发者手动设置的那个值

在这里插入图片描述

3.在函数中,一旦执行return语句后,那么函数就结束了,后面的语句将不再执行;

function fn(a){
return a;
console.log(666)
}
fn();
在这里插入图片描述
可以看出console.log(666)并没有执行。

4.就是“return”之后的值只能有一个。如果尝试返回多个值,那得到的结果始终是最后一个值
function fn(a,b){
return a,b;
}
fn(1,2);
在这里插入图片描述

5.如果真的需要函数返回多个值,那就只有将值组合成一个对象或数组进行返回

function fn(a,b){
return [a,b];
}
fn(1,2);

在这里插入图片描述

4.JavaScript递归函数

递归函数就是函数自己调用自己,类似于循环。
递归函数有俩个要素
1.要有终止条件 2.运算条件
如果没有终止条件,就会形成死递归函数,类似于死循环
死递归:会造成浏览器奔溃
// function foo(){
// foo();
// }
// foo();

举个递归函数的栗子:
//辗转相除法(求最大公约数)
function ojld (a,b){
//终止调条件
if(a % b === 0 ){
return b;
}
var r = a % b;
a = b;
b = r;
return ojld(a , b);
}
var res = ojld(33 , 99);
console.log(res)

递归函数的特点
1、递归结构简单,易理解,常用于将抽象问题简单化。
2、递归要有终止条件,否则会变成死递归;
3、递归算法运行效率低、性能消耗大,递归深度较大时慎用(等不到结果);
4、能用递归解决的问题大多都能用循环解决。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!