js过了这几关就差不多了

58 阅读3分钟

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]   属性名对应的属性值
}