JS函数概念

Posted ianyanyzx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS函数概念相关的知识,希望对你有一定的参考价值。

函数的概念

1)函数的基本概念和创建方式

创建:

  • function关键字创建代码块
function zxw(a){
    console.log(a);
}

function后面接函数的名字,圆括号是要传入函数的参数,函数体在大括号里。

 

  • 函数表达式
var zxw = function(a){
    console.log(a);
}

这是用变量赋值的写法将匿名函数赋值给变量,如果在加上了函数名,那只有在这函数体内部有效,函数体外部是无效的。

 

调用和return语句:

要调用函数时,写上函数名后面在加圆括号就可以调用了

function add(a,b){
    return a+b;
}

add(1,2)

上面函数圆括号内里的就是这个函数的参数,在调用add这个函数时将数值1和2带入进去。

函数体内部的return语句表示的是返回,当javascript遇到这个语句,就直接返回这个语句后面的值,就算后面还有语句也不会执行。return语句所带的那个表达式就是函数的返回值,如果没有return语句那这个函数就不会有任何输出,返回的是undefined。

函数可以自己调用自己,这个就叫递归。

 

2)函数名提升

JavaScript 引擎将函数名视同变量名,在用function命令声明函数时,整个函数会像变量声明一样,被提升到代码头部:

f();
function zxw(){
    console.log(‘zxw‘);
}

 虽然先执行了f函数,但由于函数提升,函数f被提升到了代码头部,所以在被调用前就声明了。

只有用函数声明的方式才存在函数提升,如果用函数表达式的方式,JavaScript就会报错。

f1();
var f1 = function(){}   //undefined

 

 

3)参数

传递方式:

JavaScript中数据类型一般分为2类:

  • 原始类型:存储在栈(stack)中的简单的数据,它们的值直接存储在变量访问的位置。
  • 引用类型:存储在堆(heap)中的对象,存储在变量处的值是一个指针(point),指向存储对象的内存地址。

这2种内存分配机制也导致传递参数的方式也不同

  • 传入的参数为原始类型:只是把变量的值传递给参数,后面无论怎么修改参数和变量都不会互相影响。
  • 传入的参数为引用类型:当传入的参数是引用类型的时,此时传入函数的是原始值的地址,因为对象变量它里面的值是这个对象在堆内存中的内存地址,所以在函数内部修改参数的话就会影响到原始值。

 

arguments对象:

说起参数,还要说到arguments对象,它可以读取函数体内部的所有参数

function f(d){
    console.log(arguments);  //函数参数的集合
    console.log(arguments.length);  //传递参数的个数
}

arguments对象的格式很想数组,但它不是数组,所以数组的方法不能用在arguments对象上

 

总结下,函数在JavaScript中作为第一等公民,它被看做一种值,凡是可以使用值的地方就可以使用函数。我们可以将函数赋值给对象或对象的属性,也可以当做参数传入其他函数,或者作为函数的结果返回。

以上是关于JS函数概念的主要内容,如果未能解决你的问题,请参考以下文章

几个关于js数组方法reduce的经典片段

web代码片段

JS常用代码片段-127个常用罗列-值得收藏

ES7-Es8 js代码片段

JS闭包的概念

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js