第三章 js基础知识 中 作用域、闭包

3-1 作用域和闭包-执行上下文

问题

//错误方式
var i a
for(i=0; i<10; i++){
        a = docuemnt.creatElement('a')
        a.innerHTML = i + '
' a.addEventListener('click', function(e){ e.preventDefault() alert(i) // i为自由变量,要去夫级获取 }) document.body.appendChild(a) } // 自执行函数,就是不用调用,只要定义完成,立即执行的函数 var i for(i=0; i<10; i++){ (function (i){ var a = docuemnt.creatElement('a') a.innerHTML = i + '
' a.addEventListener('click', function(e){ e.preventDefault() alert(i) // i为自由变量,要去夫级获取 }) document.body.appendChild(a) }) }
  • 如何理解作用域
    自由变量
    作用域链,即自由变量的查找
    闭包的两个场景
  • 实际开发中闭包的应用
// 闭包实际应用中主要用于封装变量,收敛权限
function isFirstLoad(){
    var _list = []
    return function(id){
      if(_list.indexOf(id) >= 0){
          return false
        } else {
          _list.push(id)
          return true
        }
    }
}

// 使用
var firstLoad = isFirstLoad()
firstLoad(10)  // true
firstLoad(10)  // false
firstLoad(20)  // true

知识点

  • 执行上下文
console.log(a)  // undefined
var a =100

fn('zhangsan')  // 'zhangsan' 20
function fn(name){
  age = 20
  console.log(name, age)
  var age
}

// 范围: 一段
                    
                    

你可能感兴趣的:(第三章 js基础知识 中 作用域、闭包)