Javascript学习——函数

js中函数是最重要的一部分,Function类型是引用类型。
1、函数的三种声明方式:
(1)函数声明:

function sum1(n1,n2){
    return n1+n2;
  };
  sum1(4,5);//调用函数的方式,因为js解析器在加载数据代码执行之前,它会率先读取函数声明,并使其在执行任何代码之前便可以访问,这就是函数声明提升。通过函数声明提升过程,解析器会率先读取函数声明,并将它添加在执行环境中,放在源代码树的顶部。因此可以在之前就调用函数而不会出错。

(2)函数表达式,又叫函数字面量

var sum2=function(n1,n2){
    return n1+n2;
};
sum2(23);//只能在函数声明之后调用它,函数表达式则必须等到解析器执行到它所在的代码行才会真正被解释执行。

(3)函数构造法,参数必须加引号

var sum3=new Function('n1','n2','return n1+n2');
console.log(sum3(2,3));//5

一般不推荐用这种方法定义函数,因为这种语法会导致解析两次代码(第一次是解析常规ECMAScript代码,第二次是解析传入构造函数中的字符串),从而影响性能。


var name='haoxl';
  function fun(){
    var name='lili';
    return new Function('return name');//不能获取局部变量
  }
 console.log(fun()());//haoxl

Function()构造函数每次执行时都会解析函数主体,并创建一个新的函数对象,所以当在一个循环或频繁执行的函数中调用Function()构造函数效率是非常低的。而函数字面量却不是每次遇到都会重新编译的,用Function()构造函数创建一个函数时并不遵循典型的作用域,它一直把它当作是顶级函数来执行。

注意:函数名只是指向函数的变量,那么可以把函数作为参数传递给另一个函数。因此,在声明函数之后,仅仅写上函数名如sum1,表示的是返回sum1的函数体,加上括号表示sum1立即执行。
2、变量的作用域:
全局变量(在全局声明var即函数外部但是函数内部也可以使用,或者在函数内部不写var的变量)
局部变量(在函数内部声明,只有内部使用外部不可用)
3、闭包(最重要的是函数内部的return语句,一般返回的是内部函数体)

function outer(){
   var num=10;
   function inner(){
     console.log(num);
   }
   return inner;
}
var demo=outer();
demo();//或者等价的使用outer()()

闭包传递参数(方便在监听事件时传入参数):

function outer(x){
   return function(y){
      console.log(x+y);
   }
}
var obj=outer(4);//在outer中传递参数x,而不是在obj()中传递中传递参数x
obj(6);//传递参数y
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值