咔斯Sama
文章32
标签14
分类6
web学习笔记8 - 函数与作用域

web学习笔记8 - 函数与作用域

函数与作用域 学习总结
封面画师:唏嘘的星辰 p站ID:13312138

函数

面向对象三大特点: 继承 多态 封装
函数: 代码集合体,把相同功能代码封装到一个函数体里面,以后这个函数重复使用了,

不带参数的函数封装

//  关键字 函数名 (形参){函数体}
function add(){
  var a = 10
  var b = "10"
    var c = a+b  //+ 加法运算,必须保证都是数字; 
  // var c = a / b   // 可以把字符串转成数字,然后再去计算
  // var c = a * b    //  把字符串转成数字一种方式,这种方式称为隐式转换
  
  if(b){
    // 如果a数字,   非0都为true
    // 如果字符串    非""都为true
    // 如果布尔值     true就是true,
    // 如果是空数组    为true
    // 如果是空对象    为true
    // 如果undefined  为false
    // null 不存在     为false
    console.log(c) 
  }     
}
// 必须调用:函数名()
add()

递归引入

// 1 1 2 3 5 8 13 21
function f1(){
  console.log("f1")
  //  too much recursion 函数体里面调用自己 造成死循环,需要合适的地方跳出,就是递归思想
  // f1()
}
f1()

带参数的函数封装

//  a,b,c 多个参数用逗号隔开,形参:在定义的时候没值
function f2(a,b,c){
  console.log("我的名字是"+a+"年龄是"+b+"性别是"+c)
}
f2("张三",10,"男") // "张三" 实参, 函数调用的时候,把实参的赋值给形参

带默认参数的函数的封装

带默认参数的函数的封装,把默认参数写在最后一位

function f3(name,stuid,sex="男"){
  console.log("我的名字是"+name+"性别是"+sex+"学号是"+stuid)
}
f3("李四","001") //如果给默认参数传值了,默认参数就是传递的数据,如果不传值,默认参数就是默认值
  f3("张三","002","女")
  f3("张三","男","003")

有返回值的函数

有返回值的函数,必须带关键字return

function f4(a,b,c){
  return a * b *c
}
var aa = f4(10,10,10)
console.log(aa)

作用域

  • 全局作用域: 在script标签定义的变量。就是一个全局变量,可以在任何地方去使用。
  • 局部作用域: 在函数体定义的变量,就是一个局部变量,只能用在当前的函数体中
  • 块级作用域: 在代码块{}定义的变量,采用let进行定义,只能用在当前代码块里面
    var a = 10 //全局的变量
    function f1(){
      console.log(a)
    }
    f1()
    
    //var 变量提升只会把变量声明提升到当前作用域最前面
    function f2(){ 
    console.log(b,"--------")
      var b = 10 //局部变量
      console.log(b,"--------")
    }
    f2()
    // console.log(b) // 局部变量只能用在定义函数体里面
    
    
    //  当全局变量和局部的变量如果冲突了,在局部作用域使用的是局部的变量,
    //  在全局里面使用的全局变量 
    function f3(){
    var a = 20
    console.log(a,"++++++++")
    }
    
    f3()
    console.log(a,"--------------")
    
    /*
    1 全局的用起来比较方便 只需要定义一次,全局变量不会被释放,一直占用内存空间
    2 局部的变量不能在函数体使用,当函数体执行完了,局部的变量就会直接被释放,
    */
    
    //在局部定义变量如何间接使用在全局里面
    function f4(e,f){
    var d = 100 // 局部
    return d
    }
    var f = f4()
    console.log(f)

作用域链

访问一个变量,按照作用域链进行访问,当访问一个变量,先当前作用域去找,如果找到了,就直接使用,如果没找到,去父级作用域去找,如果父级作用域没有,去他父级的父级作用域去找,直到找到全局作用域为止,这样就形成一个作用域链

var a = 100
function f2() {
  var a = 30
  function f3() {
      var a = 20
      function f4() {
          var a = 10
          console.log(a, "++++++") //10
      }
      f4()
      console.log(a, "-------") //20
  }
  f3()
  console.log(a, "????????") // 30
}
f2()
console.log(a)      //100
本文作者:咔斯Sama
本文链接:https://blog.kassama.top/webNotes8.html
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可