3.JavaScript函数

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访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值