作用域

1、梳理知识点
循环嵌套完成图形题  
函数定义 : function fn(){}
函数调用 : 函数名()
函数参数 : 
    形参 和 实际参数
函数返回值 : return  
 
2、变量的作用域
作用域 : 作用范围
 
全局变量 :
    作用范围 : 从程序开始到程序结束   即在script标签内
    在函数体外部定义的变量或内部没有var的变量就是全局变量
 
局部变量 :
    作用范围 : 函数体,从函数开始到函数调用结束后  函数调用结束后 局部变量自动销毁 
    在函数体内部通过var明确定义的变量 或 形参
函数体中的变量如果操作的是全局变量,该变量就是全局的,如果操作的是局部变量,该变量就是局部的 
 
问题来了 : 如何确定函数体中的变量操作的是局部的还是全局的???
 
作用域链 :  函数体中在改变某个变量的值时, 都会向上查找 ,如果查找到局部变量 , 操作的就是局部变量 ,如果没有找到局部变量,继续向上(函数体外部)查找,如果查找到 ,操作的就是全局变量,如果函数内部和外部都没有查找到 ,判断这个变量定义是否var 有var 就是局部变量 ,没有var 就是全局变量
为了防止全局变量污染 尽量避免出现全局变量
 
3、变量提升 
在函数体内部定义的变量  会将变量提升到函数的最顶端  只提升声明,但不赋值
function fn(){
    alert(a);
    var a = 10;
}
fn();
 
变量提升后
function fn(){
    var a;
    alert(a);
    a = 10;
}
 
 
4、js解析器(扩展)
浏览器内部有个专门解析js程序的地方,这个空间就叫做js解析器
解读js程序 有两个步骤:
   1、预解析   找一些东西  var  function 
        找到了var  就意味着找到了一个变量  会提前为这个变量赋予一个值 undefined
        找到了function 就意味着找到了一个函数  会提前为这个函数名赋予一个值 这个值就是函数块本身 
        找到了两个function,如果函数重名  后一个会覆盖前一个
        如果找到的变量和函数重名  保留函数
   2、逐行解读代码  如果遇到表达式 改变了变量的值  那么 预解析时 仓库中变量的值也会随着发送变化
 
5、函数的递归调用
递归 : 函数自己调用自己
缺点 : 消耗性能
递归本质 : 实现循环
 
 
6、函数的实参副本(扩展)
arguments
1、必须出现在函数体中 
2、含有一个length属性  代表实参个数
3、取出arguments中的实参  arguments[下标]  下标从0开始  最大下标:  arguments.length-1
 
7、函数和事件的关系
事件 : 对页面上某个元素的操作
事件三要素 : 
    事件源   名词   页面上的某个元素 
    事件     动作   
    事件处理程序    函数
单击按钮 : 
    oBtn.onclick = function(){  ....  }
常见事件 : 
    鼠标事件 : 
        onclick 单击 
        ondblclick 双击
        onmouseover 鼠标滑过
        onmouseout  鼠标离开
 
        onmouseenter 鼠标滑过
        onmouseleave 鼠标离开
 
        onmousedown 按下
        onmouseup  抬起
        onmousemove 移动
 
    表单事件(针对表单操作) :
        onsubmit  表单提交
        onfocus  获取焦点
        onblur   失去焦点
        onchange  改变(一般用于 下拉列表)
 
    键盘 :
        onkeyup  抬起
        onkeydown  按下
        onkeypress 按下+抬起
 
    页面事件 :
        onload 页面加载事件      
        onload事件处理程序中的代码 会等到页面所有内容(css img html 等) 全部加载完成后执行       
 
8、js对元素的操作
要做事 先找人
提前找到要操作的元素 obj
 
样式操作 :
    obj.style.样式 = 值  设置某个元素的样式     注意 :小驼峰的写法  fontSize  
 
属性操作(标签的属性  <img src=''>) :
    obj.属性 = 值     obj.src = ""
 
内容操作 :
    普通标签内容 :
        obj.innerHTML = ""  设置内容
    表单内容 :
        obj.value = ""  设置  
原文地址:https://www.cnblogs.com/tis100204/p/10301994.html