JavaScript函数

88 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

JavaScript函数

下一篇 JavaScript作用域和闭包精讲


前言

本篇详细介绍各种函数,与初步认识作用域。

一、认识函数

函数是一个功能体,提供若干个数据,返回处理结果。 它由函数声明和函数体组成,函数体就是封装的重复执行的代码;创建函数以后,函数体的代码不会执行,函数每调用一次,代码才会执行一次。

例: function 函数名称 (参数列表) { 函数体 return 值; }

函数有两种写法: 1.命名函数表达式:var test=function (){函数体},函数就是另一个类型的变量,但这样写就不会函数声明提前。并且函数名会被忽略。 2.匿名函数表达式:function test(){} 函数名符合小驼峰原则。

结束条件和返回值 return,return 有终止函数的功能。 没写 return,实际上是加上了一个隐式的 return,并返回undefined。

JavaScript函数中天生不定参,形参可以比实参少或多。 每个函数都有实参列表arguments,与形参是映射关系,但又是两个独立的内存。只有形参和实参对应上才有映射关系。 形参长度:函数名.lenght,实参长度:arguments.lenght。

在这里提一下函数的递归 递归:

function mul(n){
 if(n == 1 || n == 0){
 return 1;
}
 return n * mul(n - 1);
}

写递归的步骤: 1 找规律, 2 找出口(找停的点) 递归的优点是代码简洁,缺点慢

二、函数的种类

1.立即执行函数

定义:此类函数没有声明,在一次执行过后即释放(被销毁)。适合做初始化工作。 立即执行函数的两种写法 一(function (){}()); //在 W3C 建议使用这一种 二(function (){})(); 针对初始化功能的函数:只想让它执行一次的函数 立即执行的函数也有参数,也有返回值,有预编译。

只有表达式才能被执行符号执行 能被执行符号执行的表达式,这个函数的名字就会被自动忽略(放弃名字) 能被执行符号执行的表达式基本上就是立即执行函数。 +function test(){} 函数前同样放了正号,负号,!就会放弃函数名字,转换成表达式;但是*和/不行,&&||前面放东西也行

2.构造函数

系统自带的构造函数 Object() new Object();Array();Number();Boolean();Date(); 自定义:必须用 new 这个操作符,才能构造出对象,构造函数必须要按照大驼峰式命名规则,但凡是构造函数就要大写。 构造函数有 new 了以后就不能返回原始值

构造函数内部原理 前提必须要加 new,new的作用就是以下三步,而且都是隐式的: 1.在函数体最前面隐式的创建 var this = {} 空对象,this._ _ proto _ _指向函数的原型对象prototype 2.执行 this.xxx = xxx; 3.隐式的返回 return this

3.包装类

new String();new Boolean();new Number(); 用在原始值上,原始值不能有属性和方法,但经过了包装类(加隐式)可以调用一些属性和方法: var num = 4; num.length = 3; //系统隐式的加上 new Numb er(4).length = 3; 然后删除 delete console.log(num.length); //系统隐式的加上 new Number(4).length; 但是这个 new number 和上面的 new number已经不是同一个了,所以返回 undefined 而上面这些隐式的过程就是包装类 所以字符串的length可求。赋值无效。数组length可赋值截断数组。 undefined和null不可以有属性,会直接报错。

初识作用域

作用域定义: 函数外面不能用函数里面的。里面的可以访问外面的,外面的不能访问里面的,彼此独立的区间不能相互访问 window就是全局的域,document是HTML文档的根节点,可通过window.document访问。