JS函数

1、JavaScript中函数的基础知识

对代码实现复用

1-1声明函数的方式

  1. 字面量声明函数

function函数名(形式参数){

}

函数名:就是我们调用函数时需要书写的标识符

形式参数:简称形参,是调用函数时需要接收的参数

实际参数:简称实参,是调用函数时实际传递过去的参数

如:function test(name){

    console.log(”Hello,"+name)

}

test("xie jie");

  1. 函数表达式声明函数

let变量=function(){

函数体

}

如:let test=function(name){

console.log(”Hello,"+name);

}

test("xie jie")

  1. 构造器声明函数(少用)

let变量=new Function(”参数”,”参数”,”函数体”)

 

函数的调用:调用函数,那么就必须要有括号。

1-2函数的返回值

关键字为return,代表要从函数体内部返回给外部的值。

即使不写return,函数本身也会有返回值。Undefined

let test=function(){

    console.log(”Hello")

}

let i=test(); //hello

console.log(i); //undefined

 

需要注意的是,return后面的代码是不会执行的,因为在函数里面一旦执行到return,整个

函数的执行就结束了。

 

return关键字只能返回一个值,如果想要返回多个值,可以考虑返回一个数组

1-3函数的参数

1-3-1实际参数和形式参数

关于形参:

  1. 参数名可以重复,同名的参数取最后一个参数值
  2. 即使函数声明了参数,调用时也可以不传递参数值
  3. .调用函数时可以传递若干个参数值给函数,而不用管函数声明时有几个参数

function test(x){

    console.log(x);

}

test(1,2,3);//1

因为当一个函数要被执行的时候,系统会在执行函数体代码前做一些初始化工作,其中之一就是为函数创建一个arguments的伪数组对象。这个伪数组对象将包含调用函数时传递的所有的实际参数。因此,arguments的主要用途是就是用于保存传入到函数的实际参数的。

如:function test(x){

    for(let i=0;i<arguments.length;i++){

          console.log(arguments[i]);

      }

}

test(1,2,3); //1 //2//3

 

1-3-2不定参数

 

不定参数是从ES6开始新添加的功能,在最后一个形式参数前面添加3个点,会将所有的实参放入到一个数组里面,示例如下:

不定参数  放置后面,会形成数组  如果放前面报错

function test(a,...b){

    console.log(b);

}

test(1,2,3,4,5,"f");

 

1-3-3默认参数

 

1.从ES6开始,没传实参,就用默认值,如有实际参数,就传实际参数

function test(name="world"){

    console.log("hello",name);

}

test()

test("xixi")

2. 如果参数是一个数组

function([a=1,b=2」=[ ])

3.换成对象亦可

let fn=function({name="xiong",age=18}={}){}

1-4函数属性和方法

1-4-1. name属性

表示函数的函数名

1-4-2length属性

表示形式参数的个数

arguments.length 调用函数实际参数的个数。

2、箭头函数

2-1基本介绍

从ES6开始新增加的一种声明函数的方式,

基本语法:let变量=(形式参数)=>{函数体}

 

尽量按照基本语法写,以下了解

//如果没有参数

let变量=()=>{

}

//一个形参可不要括号

let变量=形参=>{

}

//只有一个返回值,可不要return

let变量=形参=>expression

3、变量提升与函数提升

3-1作用域

全局作用域:这个是默认的代码运行环境,一旦代码被载入,引擎最先进入的就是这个环境。

函数作用域:当进入到一个函数的时候,就会产生一个函数作用域

函数内部可以访问到全局或外层,外层不可访问里面的。

eval作用域:当调用eval函数的时候,就会产生一个eval作用域(少用)

 在函数里声明变量时,使用var,let const,外部都不能访问这个变量,但是声明变量不使用关键字时可以访问,相当于使用var,但是不会产生变量提升。

let test=function(){

   x=3;

}

test();

console.log(x)

3-2变量提升

所谓变量提升,就是指在使用var关键字进行变量声明的时候,默认会将声明变量的部分提升至当前作用域的最顶上,但是注意提升的只有变量的声明部分,赋值是不会提升的。

 

3-3函数提升

所谓函数提升,是指当我们使用字面量方式来声明一个函数的时候,此时函数的声明会提升到当前作用域的最顶端,这意味着我们可以将函数的调用书写到函数的声明之前。

test();

function test(){

    console.log(”Hello!”)

}

但是使用函数表达式就不会提升,如果在声明函数表达式时用var可以产生变量提升。

4、回调函数

4-1基本介绍

指将一个函数作为参数传递给另外一个函数,然后在另外一个函数里面执行传递过去的函数。

回调函数可以和其他参数一起传入到一个参数里面

let test = function(name,fn){

    console.log(`My name is ${name}`);

    fn();

}

let test2 = function(){

    console.log("I'm coding");

}

test("xiejie",test2);

// My name is xiejie

// I'm coding

4-2常见回调函数介绍

  1. sort()

console.log(arr.sort(function(a,b){

    return a - b;

    //  b - a

}));

  1. 迭代方法

every()对数组的每一项运行给定的函数,如果该函数每一项都返回true,则返回true

every  全真则真,有假则假 

let arr=[2,3,4,5,6,7,8];

let i=arr.every(function(item){

    if(item%2==0){

        return true;

    }else{

        return false;

    }

})

console.log(i) //false

some(),该方法可以对数组的每一项运行指定的函数,如果该函数只要有一项返回true则返回true。   有真即为真

filter() : filter是过滤的意思,所以这个方法会返回一个数组,数组里面是返回true的元素

// filter()选出true的元素放进数组

let arr=[1,2,4,5,6,8]

let i=arr.filter(function(item){

    if (item%2==0) {

        return true;

    }else{

         return false;

    }

})

console.log(i) //[ 2, 4, 6, 8 ]

forEach():将数组每一项传入到函数,然后执行该函数里面的代码。需要注意一下的是,该回调函数没有返回值。

Map()对数组的每一项运行test函数,返回一个数组,这个数组是每次调用函数后的运行结果

posted @ 2019-10-16 16:35  熊萬萬  阅读(133)  评论(0编辑  收藏  举报