JavaScript之函数

1、什么是函数?

程序中专门保存一段可反复使用的代码段的程序结构。

函数的本质是对象。

2、为什么使用函数?

重用,只要一段代码,可能被反复使用时,都要保存在一个函数中,需要使用时直接调用函数

3、定义函数的三种方式:

(1)用声明的方式定义,结构:

function add(a,b){
    return a+b;//返回值
    }
    c = add(1,2);
    console.log(c); // 打印出3

1)、function是关键字,add是函数名,函数名是可选的,如果不写函数名,该函数被称为匿名函数,()不可省略。

2)、(a,b)称为形参列表,a、b是函数的参数,叫做形参变量,注意:形参中的变量即使没有var,也能自动创建该变量。如果一个函数不需要外界传入值,就没必要定义形参。

3)、return 返回值是一个函数的执行结果,默认情况下,函数内的执行结果,函数外不可使用,调用函数时,希望获得函数的执行结果,才用返回值。注意:return不能用于三目运算内部

错误写法: 条件 ?return 值1 : return 值2

正确写法:return   条件 ?值1  : 值2

如何调用:var 变量 = 函数名(实参1,实参2);将调用函数时的实参1,实参2逐一赋值给形参变量

问题:用声明方式创建的函数会被声明提前。

声明提前:指程序开始执行前,先在整段程序中查找用var声明的变量和用function声明的函数,将其定义提前到当前作用域的顶部集中创建,赋值留在原地

console.log(a);//a未声明,undefined
var a = 10;//var a,a=10;
console.log(a);//10
function fun(){console.log(1)};
fun();//2
function fun(){console.log(2)};
fun();//2
//相当于:
function fun(){console.log(1)};
function fun(){console.log(2)};//覆盖前一个
fun();
fun();

(2)用赋值方式来创建

结构:var 函数名 = function(形参列表){ 函数体; return 返回值 }

 强调: 因为=右边已经不是function函数名(){}结构了,所以=右边不是声明!就不会被提前!再加上=是赋值的意思,也保证了=以及右边的内容不会被提前

 优点: 不会被声明提前,不会打乱程序正常的执行顺序。所以,创建函数时,首选赋值方式。

(3)用new创建(基本不用):

结构:var 函数名=new Function("形参1", "形参2", ... , "函数体; return 返回值")

总结:

创建函数: 3种方式:

a. 用声明方式创建:

              1). function 函数名(形参列表){

                     函数体;

                     return 返回值

                }

 b. 用赋值方式来创建:

              1). var 函数名= function(形参列表){

                                函数体;

                                return 返回值

                            }

c. 用new来创建: 又难用,效率又低,所以极少使用。了解即可

       var 函数名=new Function("形参1", "形参2", ... , "函数体; return 返回值")

扩展:

函数的本质是内存中一个引用类型的对象。

函数对象在内存中有唯一的一个地址值,来标识函数对象存储的位置。

函数名保存的不是函数定义本身,而是函数的地址值。

调用函数时,js引擎先获得函数名变量中的地址,再通过地址找到内存中的函数对象,执行函数对象中保存的代码片段。

JS中没有堆和栈,所有的变量存在window对象中;用function相当于new Function(标准写法);new会在内存中创建一块内存空间。

无论function fun(){}还是var fun=function(){},到了低层都会被翻译为:   var fun=new Function(...);

小写的function其实是new Function的简写。

function fun(){} 先提前翻译为var fun=new Function(...);

var fun=function(){} 不提前,直接在原地翻译为var fun=new Function(...);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值