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函数概念的主要内容,如果未能解决你的问题,请参考以下文章