函数下

132 阅读3分钟

作用域

 能生效,能执行的区域就叫做作用域,作用域的区域不一样,效果也不一样的
全局作用域和函数作用域
  全局作用域
  不在函数作用域中创建的变量,生效的区域是在函数作用域之外
  
<script>
var a=10
console.log(a)
</script>
  在全局作用域中创建的变量叫做全局变量
  函数作用域
  在函数内部作用域中创建的变量,生效执行的区域仅限在函数内部
  
<script>
var a=10
function add(){
   var  b=5
   console.log(b)
}
console.log(a)
</script>
  在函数作用域内部创建的变量叫做局部变量

作用域链

规则
    函数作用域是嵌套在全局作用域之中的,函数作用域中,我们也可以在定义一个或者多个函数进行嵌套。这样子的形式我们就称为作用域链
    当我们创建并且定义了变量之后,我们想要输出这个变量的时候,我们需要从里到外,依次进行,先在函数内部看看,如果函数内部有已经定义了的变量并且赋值了那么就先用局部的。
    但是其实在函数内部也会先进行一次预解析,先把变量和函数表达式提升到当前作用域的顶部,然后按照顺序进行执行,如果当前函数作用域内没有被定义的变量,那么会往上一级找,如果还是没有那么会在上一级找,直到找到全局作用域中,如果全局也没有,那么会在全局进行定义
    全局可以用局部的,局部的不能用全局的,自己没有找上一级,上一级没有找全局,全局没有就报错
递归函数
     递归函数其实就是自己调用自己
     语法
     
  function  add(num){
        return  
  }
 var str=add(10)
 console.log(str)

对象

 对象的创建语法,对象的创建都是一对键值对,左边是对象名 右边是键值,右边可以是字符串,也可以是数字,也可以是一个{}大括号包裹起来,里面放入你想要的数据,也可以放入函数表示式.....
var  obj="str"

var  obj={
     name:"ggg"
     age:14
}
需要注意的是,里面的键值对,平时的时候可以不带引号,但是特殊情况下必须要有引号,不然会有歧义
还有就是在对象中是没有顺序的
对象里面嵌套方法
  对象中值的类型是没有限制的,可以是任意类型。当值不是函数的时候,我们将这个键值对叫做对象的属性,当值是一个函数的时候,我们将这个键值对叫做对象的方法。

事件

事件概念
 事件三要素
   事件源 -----》触发事件的标签
   事件类型 ------》行为的类型,是移入还是移出还是点击还是双击.....
   事件处理程序 -----》事件触发后你要干的事情
   
<button id="btn"></button>
<script>
     btn.事件名=function () {
          你要做的事情
     }
</script>
 事件          | 备注               |
  | ----------- | ---------------- |
  | onclick     | 当鼠标左键单击          |
  | ondblclick  | 当鼠标左键双击          |
  | onmouseover | 当光标在指定的内容上面      |
  | onmouseout  | 当光标离开指定的内容       |
   | onkeydown   | 当键盘按下的那一刻        |
  | onkeyup     | 当键盘抬起的那一刻        |
  | onfocus     | 当输入框得到焦点         |
  | onblur      | 当输入框失去焦点         |
   | onchange    | 当指定的标签里面内容有变化的时候       |
   | onsubmit    | 提交事件             |
  | onload
 注意:如果给事件赋值函数名,千万不能加小括号调用
   事件还可以写在行内:
   
<button onclick="console.log('点击了按钮')">按钮</button>
<!-- 可以在行内调用函数 -->
<button onclick="fn()">按钮</button>
<script>
    function fn(){
        console.log('点击了按钮')
    }
</script>
 注意:在行内的事件中调用函数一定要加小括号调用才行