作用域

80 阅读2分钟

作用域概念

作用域:变量起作用的范围,分为全局作用域和局部作用域

  • 全局作用域:在整个js中起作用

  • 局部作用域:在函数体内起作用

    var num = 100 //全局变量
    
    functon fun(){
        //局部作用域
        var num1 = 100//局部变量
        console.log(num)   // 100
    }
    console.log(num1)  // 报错,num1 is undefind
    console.log(num)   // 100     
    

作用域的访问规则

1.首先会在当前作用域找

2.如果当前作用域没找到,就到上级作用域找

3.如果上级作用局没有,就接着往上找,到全局作用域

4.如果全局作用域也没有,就报错

var num = 100 //全局变量
    
    functon fun1(){
        //局部作用域
        var num1 = 100//局部变量
        function fun2(){
            var num2 = 100
            console.log('fun2 num2', num2) //当前作用域
            console.log('fun2 num1', num1) //上级作用域
            console.log('fun2 num', num)   //全局作用域
            console.log(num3)              //没找到,报错
        }
    }
    console.log(num1)  // 报错,num1 is undefind
    console.log(num)   // 100 

作用域的赋值规则几乎等同于访问规则,区别是如果在全局作用域中也没有找到函数的声明,他会自动创建全局声明。

递归函数

概念: 函数自身调用自身,这样的函数被称为递归函数

注意:要有递归结束的条件,否则会成为死循环,同时也要有改变循环的条件(类似于循环)

递归解决问题 》》 后面的结果由前面的结果推导出来,可以采用递归简化实现

  // 1 + 2 + 3 + 4 求和
      function f(n) {
          //结束条件
          if( n == 1){
              return 1
          }
          return f(n - 1) + n
      }
      var sum = f(n)

对象

面向对象 现实生活中的对象 具体一个事物

软件世界 对象-->Object 具有属性 方法

创建对象

  var obj = {}  //创建一个空对象
  
  var obj = {       //创建一个对象
      name:'jack',  //姓名属性
      age:'20',     //年龄属性
      sex:'男'      //性别属性         
  }

obj称为对象名,也可以叫做引用变量 通过对象名访问对象属性 对象名.属性名 --> 属性值

   obj.name  -->  'jack'

修改属性的值 直接获取属性然后赋一个新的值

   obj.name = 'rose'

删除属性

   delete obj.name

添加属性

   obj.score = 98 --> obj.新属性 == 属性值

遍历对象 for-in

   for(var key in obj){
       console.log('key',key)
   }

访问属性值,属性名是变量

console.log( 'name ',obj.name)
    var _name = 'name'
    console.log(obj[_name])
    console.log(obj['name'])
    

复杂数据类型

1、对象 Object

2、数组 Array 数组的作用 : 存储一系列有序数据的集合

  1:创建数组 字面量方式
       
       var arr = []   //创建空数组
       var arr = [1,2,'jack',...] //创建数组
  2:索引号        0  1   2  ...
  3:访问数组元素
      arr[i]  // i为索引值
  4:数组长度 
      arr.length   // 长度等于元素个数
  5: 遍历数组
      for( var i = 0; i < arr.length ; i ++){
          console.log(arr[i])  //遍历打印数组元素
      }

构建函数 创建数组

   var arr = new Array()  //创建一个空数组