函数
1)定义
函数是事件驱动或者调用才执行的可重复使用的代码块
2)函数的作用
①可以控制程序执行时间
②重复使用
3)函数的声明
①function命令法
语法:
function 函数名(形参1,形参2,..){
函数体
}
注意:
1、形参可以省略,多个形参之间用逗号隔开,最后一个形参后不加逗号
2、函数调用可以写在声明之前(js在代码执行之前会把函数声明提升到所有代码的最顶部)
②函数表达式法
var 变量名 = function(形参1,形参2,..){
函数体
};
注意:
1、调用不可以写在声明前面(变量声明提升到所有代码的最顶部,赋值留在原地)
③构造函数法(了解)
var 变量名 = new Function('形参1','形参2',...,'函数体');
注意:
1、调用不可以写在声明前面(变量声明提升到所有代码的最顶部,赋值留在原地)
2、参数都是string类型
4)函数的调用
函数名(实参1,实参2,...);
变量名(实参1,实参2,...);
注意:
1、实参可以省略,多个实参之间用逗号隔开,最后一个实参后不加逗号
5)函数的参数
①形式参数
简称形参
形参是函数声明时写在小括号内的参数
形参是局部变量,不用var声明,直接写名称,局部变量只能在函数内部使用
多个形参之间用逗号隔开,最后一个形参后面不加逗号
②实际参数
简称实参
实参是函数调用时写在小括号内的参数
实参实际是给形参赋值
多个实参用逗号隔开,最后一个实参后面不加逗号
实参和形参最好一一对应
当实参个数大于形参个数时,多余的实参直接忽略
当形参个数大于实参个数时,多余的形参为undefined
栈:
基础数据类型、局部变量
特点:先进后出 first in last out
后进先出 last in first out
存储数据:压栈 push
弹出数据:弹栈 pop
函数的局部变量会在栈中开辟一个栈帧,存储局部变量
堆:
引用数据类型
6)重载 overload
重载:函数名相同,形参列表数量不同,表示不同的函数
js中没有重载,函数名相同时,后面的函数会覆盖前面的函数
7) 函数的返回值:
函数执行完毕之后,函数自身得到的一个结果。
① 如果一个函数没有显式的返回任何的数据,那么默认返回undefined。也可以认为返回undefined的函数是没有返回值的。
②如果希望一个函数执行完毕之后返回一个你需要的结果,那么必须在函数体内使用关键字 return 将你需要的结果返回。
③如果只是希望定义的函数执行某个功能,而不希望得到一个结果,那么就不需要返回值,也不需要使用return 带回任何的结果。
④return的个数没有限制,可能在不同的条件下使用return 返回不同的值。
⑤ 当函数中一旦执行了return,那么该方法立即结束执行。并返回return 后的值。
isNaN(num): 是一个全局函数,直接使用即可。
作用:用来判断参数 num 是否是NaN的。如果是,返回true。否则返回false。
typeof js的关键字,
语法:typeof 表达式;
作用:用来返回表达式的返回值的类型。返回的结果是string类型的数据。
8)var 和 let 的相同点和不同点。
相同点:
1:都是js的关键字,都是用来定义变量的。
不同点:
1:var 和 let 出现的时间点不同。var 和js语言一起诞生的。
let 是在ES6 这个版本出现的。
2:var 定义的变量只有局部作用域和全局作用域。
let 定义的变量有局部作用域,全局作用域、块级作用域。
代码中的一对大括号就是一个js代码块。
3: 使用var 可以重复定义变量。let不可以。
4: 使用var 定义的全局变量,会作为window对象的属性存在。
let定义的全局变量不能作为window对象的属性存在。
9)函数的执行符。
():称为函数的执行符。
1: 回调函数的应用:在一个函数的内部调用实参传入的函数。
2:匿名立即执行函数,该函数,执行且仅执行一次。
如果某个功能希望js加载的时候就执行,而且就执行一次,那么可以使用该方式。
了解:
函数内定义的函数。局部函数。
1:局部函数是否可以在全局中使用。
2:局部函数可以作为闭包使用。
//全局函数。
function max(a, b) {
return a > b ? a : b;
}
//局部函数。
function test() {
//局部函数
var innerFun = function () {
console.log ("我是局部函数");
}
//可以直接在内部调用执行。
// innerFun();
return innerFun;
}
//不能直接调用内部函数,间接调用。
var fn = test();
fn();
10) 函数的属性和功能介绍:
函数是一个对象。任何的对象都可以具有属性和功能。
属性:对象自身的特征。
功能:能做什么,方法。
函数对象也有功能和属性。
属性:name、length
name属性:函数的名字,或者是指向匿名函数的变量名。
函数名.name
函数名["name"]
length属性:函数的形参的个数。
函数名.length
函数名["length"]
函数功能:
函数名.toString();
返回当前函数的字符串表示形式。
11)函数的分类:
1:根据参数
有参函数
无参函数
2:根据返回值
有返回值函数
无返回值函数
3:根据定义者
js的内置函数:isNaN、isArray、Math.random()
开发者自定义函数:
4: 根据函数的调用者
实例函数|实例方法
对象实例调用的函数。
数组.forEach().
实例方法操作的数据是当前实例对象。
静态函数|静态方法
类型直接调用。
Array.isArray() Math.random()
静态方法一般都是工具方法,要么不操作任何对象数据,要么操作实参数据。
和数组有关的静态方法:
语法:Array.isArray(obj)
作用:用来判断obj是否是数组。 如果obj是数组,那么返回true,否则返回false。