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、能用递归解决的问题大多都能用循环解决。
来源:CSDN
作者:寒乄星
链接:https://blog.csdn.net/qq_41413562/article/details/104605255