- 变量的作用域
全局作用域:函数以外
函数作用域:函数以内就是函数作用域
全局变量:全局作用域下声明的变量,可以在任意作用域下访问到
局部变量:函数作用域下声明的变量,只能在所在的函数作用域下访问
函数内不加var 声明的变量是全局变量 程序执行前,会将var声明的变量提升到所在作用域的最前边 ,知识提升声明部分,赋值不提升 |
var c=3; function fun(){ console.log(c);//undefined var c=5; } fun(); //在全局作用域下查找c,找的全局变量c console.log(c);//3 |
var a; console.log(a); //var a=1; a=1; |
设置全局变量。全局变量是在函数外部定义的变量,不属于任何函数。因此,调用函数中的return返回值,但您可以将其馀返回值分配给全局变量,从而获得返回多个值的效果。
- 函数的作用域
全局函数:在全局作用域下创建的函数,可以在任意作用域下调用
局部函数:在函数作用域下创建的函数,只能在所在的函数作用域下调用
作用域链:作用域之间相互嵌套,查找变量的时候,先到当前作用域下查找,如果没有会一直往上一级作用域查找
函数提升:程序执行前,会自动将函数提升到所在作用域的最前边,可以先写调用在写创建
三、递归
在函数中调用自身这个函数,本身是一种死循环,会造成内存泄漏
使用递归:
要有边界条件
找规律
使用ruturn结束
斐波那契数列(第一项,2项是1),从第3项开始,每项的值是前两项的和。使用递归计算任意一项的值是多少?
1 1 2 3 5 8 13
n=(n-1)+(n-2)
四、匿名函数
function (){}
没有名称函数
- 创建函数
函数声明 function fn(){ } |
函数表达式 var fun=function(){ } |
(1)函数名称()和函数名称的区别
函数名称() 调用函数,执行函数体的代码
函数名称,本质是一个变量,保存了函数
练习:使用匿名函数来创建getSum,传递任意两个数字,返回两者之间所有整数和
(2) 函数声明和函数表达式创建函数的区别
函数声明存在函数整体提升,可以创建再写调用
函数表达式只是存在声明提升,必须先写创建再写调用
c(); //5 var c=2; function c(){ console.log(5); } c(); //报错 |
- 匿名函数的自调用
为了创建函数作用域,防止全局污染
;(function (){ //函数作用域,变量都是局部变量 })(); |
- 回调函数
将函数作为参数传递
function tao(madai,mmm…){ madai();//通过参数名称,调用传递的回调函数 } function xin(){ } tao(xin,mmm) tao(function (){},….) |
多个则逗号分开;
五、系统函数
Number()/parseInt()/parseFloat()…
isNaN() 检测字符串中是否含有非数字,含有àtrue,不含有àfalse
会自动调用函数Number()转为数值,然后查看是否为NaN
eval() 执行字符串表达式
自定义对象
数组
字符串对象
Date对象
Math对象