全是干货——你不知道的那些前端小知识(5)

80 阅读2分钟

十九. 作用域

  变量使用使用区间的,变量不是说声明之后在哪里都可以用,他有一个使用的范围,称为作用域
  作用域分为
  1.全局作用域 JS给我们提供了一个叫做window的全局作用域,可以理解为整个script标签内的作用域,就是全局作用域
  2.局部作用域 在JS中,有且只有函数能够创建局部作用域(函数作用域),局部作用域开始和结束位置,就是函数代码段的开始和结束位置,局部作用域(函数作用域)内声明的对象叫做局部变量  局部变量会挂载到window上
  例:var num = 100; 根据规则这里是script标签内部,所以是全局作用域,所以这个num也可以叫做全局变量

二十.作用域链

  在查找变量时,会先在当前作用域内查找,找到就用,没找到就去上层查找,一直会查找到顶层作用域(全局---window)然后在查找过程中,我们把逐层向上的一层一层查找所构成的一个链条叫做作用域链(实际上是没有作用域链的,这是一个纯概念的东西)
  变量的访问规则
     变量访问会先在当前作用域内查找,找到拿来直接用,如果没有找到,会去上层作用域查找,找到直接用,如果上层作用域没找到,会继续去上层作用域的上层作用域查找,找到直接用,没找到会继续往上,如果找到全局作用域内还没有变量会直接报错 num is not defined
  变量的赋值规则
      变量赋值会先在当前作用域内查找,找到直接拿来赋值,如果没找到,会去上一层作用域查找,找到直接赋值,如果找到全局作用域内还没有找到变量,那么会直接将变量定义在当前作用域内(全局作用域)然后赋值
       重点:作用域链只会向上查找,不会向下

二十一. 递归函数

     在函数内部调用自身,此时就是写了一递归,但他是死递归 想要写一个正确的递归函数,需要在递归内部写上返回点(到某个条件时,停止递归)
     例:function fn(n) {if(n == 1){return 1} return n * fn(n - 1) var sum = fn(4)console.log(sum) 值为24

二十二. 规律的数列

     例:有一个数列 第一位和第二位固定为1
     从第三位开始,每个位置的数字,是前两位的和
     function fn(n) ifn==1 || n==2){return 1}
     return 数列中第四位的值 + 数列中第三位的值 return 愤怒(n-1) + fn(n-2)
     var sum = fn(5) console.log(sum)