Javascript基础(四)作用域和闭包

题目:

  • 说一下对变量提升的理解
  • 说明this有几种不同的场景
  • 创建10个a标签,点击的时候弹出对应序列号
  • 如何理解作用域
  • 实际开发中闭包的应用

———————我是思考的分界线——————————–

知识点:
1、执行上下文
2、this
3、作用域
4、作用域链
5、闭包

1、执行上下文

console.log(a) //undefined
var a = 100
fn('zhangsan')  //'zhangsan' 20
function fn(name){
    age = 20
    console.log(name,age)
    var age
}
  • 范围:一段<script>或者一个函数(会生成一个全局的执行上下文)
  • 全局:变量定义,函数声明 一段<script>
  • 函数:变量定义,函数声明 ,this,arguments

    函数声明:function a(){}

函数表达式:var a = function(){}

this:

this要在执行时才能确认,定义时无法确认
  1. 作为构造函数运行
  2. 作为对象属性执行
  3. 作为普通函数执行
  4. call apply bind
//call
function fn(name,age){
    alert(name)
    console.log(this)
}
fn.call({x:100},'zhangsan',20)
//call 强制将this指向为第一个参数
fn.apply({x:100},['zhangsan',20])
//apply 强制将this指向为第一个参数第二个参数为数组 
//bind
var fn = function(name,age){
    alert(name)
    console.log(this)
}.bind({y:200})
fn('zhangsan',20)
//定义完成用bind强制改变this指向为bind的参数 
//不能用函数声明的方式.bind

作用域:

js没有块级作用域

只有函数和全局作用域

作用域链:

var a = 100
function fn (){
    var b = 200

    //当前作用域没有定义的变量,即'自由变量'
    console.log(a)

    console.log(b)
}

闭包:
闭包就是能够读取其他函数内部变量的函数
闭包的使用场景:

  1. 函数作为返回值
  2. 函数作为参数传递

    解题:
    1、说一下对变量提升的理解、

     变量定义
    
     函数声明(注意函数声明和表达式的区别)
    
     都会被放在前面。
    

    2、 说明this有几种不同的场景

     (1)、作为构造函数执行
    
     (2)、作为对象属性
    
     (3)、普通函数
    
     (4)、call apply bind
    

    3、创建10个a标签,点击的时候弹出对应序列号

var i 
for( i=0; i<10; i++ ){
    (function(i){
        var a = document.createElement('a')
        a.innerHTML = i + '<br/>'
        a.addEventListener(click,function(e){
            e.preventDefault()
            alert(i)
        })
        document.body.appendChild(a)
    })(i)
}

4、如何理解作用域

 自由变量
 作用域链,即自由变量的查找
 闭包的两个场景

5、 实际开发中闭包的应用

 封装变量,收敛权限
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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值