二 函数
1.创建
-
关键字
function 函数名(){ 代码块 } -
字面量
var 函数名 = function(){ 代码块 } -
构造函数
var 函数名 = new Function("参数","执行的代码")2.函数的调用
- 事件驱动(单击/双击/滑过..)
- 自调用
3.函数的参数
- 形参
- 实参
- return返回值
4.函数作用域
-
变量关系
变量的关系: 1.写在函数内部的叫作局部变量 2.在全局不能访问局部变量 3.在局部可以访问全局变量 4.函数在不调用的时候,局部变量是不存在的. 5.在函数运行完毕之后,变量被垃圾回收机制回收 作用域链 根据函数内部能访问函数外部变量的这种关系。逐层向外查找变量的过程 变量的 作用域链 注:什么是作用域链?(面试常问) a、 根据在内部函数可以访问外部函数变量的这种机制,用链式查找决定哪些数据能被内部函数访问。 简单说就是作用域集合 b、当前作用域 -> 父级作用域 -> ... -> 全局作用域 形成的作用域链条 js的执行环境 : 每个函数的执行都会产生一个执行环境 ;全局执行环境是最外围的执行环境,全局执行环境被认为是window对象,因此所有的全局变量和函数都作为window对象的属性和方法创建的。全局变量 局部变量
-
变量提升
var a / function 会被提升到当前作用域顶端
1.把声明的变量var a 提升到当前作用域的最顶端 2.赋值语句和逻辑语句都不做提升,原地等待执行 3.function关键字声明的函数也会等待提升到作用域的最顶端 4.变量提升的规则:所有用var声明的变量先提升,然后在提升function声明的函数整体(官方解释:函数的执行的权重比较高) 5.匿名函数不会被提升. -
词法作用域
静态作用域 动态作用域
-
作用域链
当前作用域----父级作用域---全局作用域
5.函数的this指向
- 谁调用函数,this指向谁
- 事件驱动,给谁绑定事件,this指向谁
6.argument
函数内部自带的一个对象,形式类似数组,常用来判断传入参数的个数
7.立即执行函数
;(function fn(){ console.log(10); })(); 建议:再立即执行函数前面加一个运算符(目的:防止上面代码的执行)8.递归(自己调用自己)
function fn(n){
if(n == 2 || n == 1) return 1;
return fn(n-1)+fn(n-2);
}
console.log(fn(7));
9.匿名函数
10.回调函数
11.数学函数
Math.random(); //0 - 1 的随机数
Math.round() //四舍五入取整
Math.ceil() //向上取整
Math.floor() //向下取整
Math.abs() //绝对值
Math.max(num1,num2....) //比较最大值
Math.min(num1,num2....) //比较最小值
Math.PI //π 3.1415926 - 3.1415927
Math.pow(x,y) //x的y次方
Math.sqrt() //开平方
Math.sin
Math.cos
Math.tan