js函数这块可以说是在js里面算上难度之一了吧,尤其是作用域和递归,让人听着脑瓜子懵懵的,绕来绕去的。不得不一遍一遍的看视频,我一直相信多看几遍肯定会有用的,现在基本算是理清了头绪,下面又是我今天总结的一些知识点笔记,希望能帮到在和我一样独自走在前端这条不归路的小伙伴,nlnl!。
1.函数作用域
全局函数:在全局作用域下创建的函数,可以在任意的作用域下调用
局部函数:在函数作用域下创建的函数,只能在当前的作用域下调用
作用域链:作用域之间嵌套形成的一种结构,在查找变量的时候首先会在当前作用域寻找,如果没有会一直往上一级作用域寻找
函数整体提升到所在作用域的最前边
2.递归
在函数的内部调用自身这个函数
递归默认是一个死循环,解决的问题是循环相关的问题
递归会造成内存泄漏(内存空间被占满,无法再分配空间)
function say(){
console.log('从前有座山');
say();
}say();
3.匿名函数
var fun=function(){
}
变量名称fun()就是函数名称
对比函数名称和函数名称 ()
函数名称:本质上就是一个变量,保存了一个函数
函数名称():调用一个函数,执行函数体中的代码,得到返回值
对比函数声明和函数表达式的区别
函数声明创建的函数存在函数的整体提升
函数表达式创建的函数只是存在声明的提升,必须先创建再调用
4.匿名函数自调用
全局污染:全局变量(函数)的出现,全局变量可以在任意作用域访问到
(function(){
var n=1;在函数作用域下,变量都是局部变量,可以防止全局污染
})();
5.回调函数
在调用一个函数的时候,传递参数还是函数形式
function tao(madai){
madai(); //调用传递的函数
}
function xin(){
}
tao(xin);//xin是回调函数
tao(function(){ });//匿名函数是回调函数
6.系统函数
isNaN() 检测一个字符串中是否含有非数字,先把值隐式转换为数值,然后查看是否为NaN
var str='1';
//会隐式转换为数值,查看是否为NaN
console.log( Number(str) );
console.log( isNaN(str) );
eval() 执行字符串中的表达式,也可以用来在输入框相加求和
var str='parseInt(5.5)';
console.log(str);
console.log(eval(str));
7.对象
是一组属性和方法的集合 比如:一部手机:属性有颜色、品牌、尺寸、产地... 方法有打电话、上网、游戏、看视频、听音乐...
(1)JS中的对象
自定义对象:用户自己创建的对象
内置对象:JS提供的对象
宿主对象:根据不同的执行环境划分
(2)自定义对象的创建方式
对象字面量
内置构造函数
自定义构造函数
(3)使用对象字面量创建对象
{属性名:属性值, 属性名:属性值....}
如果属性名中含有特殊字符必须添加引号,其它情况可以省略引号 (4)访问属性
对象.属性名
对象['属性名']
如果属性不存在结果为undefined
(5)内置构造函数创建对象
new Object()
创建一个空对象,需要单独的添加每个属性
(6)遍历属性
依次访问对象的每个属性
for(var k in 对象){
k 属性名
对象[k] 属性名对应的属性值
}