关于闭包的形成是函数嵌套函数,那么这种事件函数嵌套事件函数的算形成闭包吗?

document.onclick=function(ev){
        var a=ev
    alert(a)
    console.log( typeof a)
    for ( var attr in a ){
        console.log(attr +"="+ a[attr])
    }
    var div1=document.getElementById("div1");
    div1.onclick=function(ev){
        ev.cancelBubble=true;
        var b=ev
        alert(a==b)
        console.log( typeof a)
        for ( var attr in a ){
        console.log(attr +"="+ a[attr])
        }
    }
}

//关于闭包的形成是函数嵌套函数,那么这种事件函数嵌套事件函数的算形成闭包吗?

阅读 3k
3 个回答

引用自由变量在一定程度上就可以称为闭包了。

再安利几个方法
一个在chrome打断点,一个在vscode调试打断点,都可以查看Closure

算。。函数 div.onclick 在函数 document.onclick 的作用域上有一个闭包。

A closure is a combination of a code block and data of a context in which this code block is created.

  • 闭包是基于词法作用域书写的自然结果。

  • 严格来说,所有函数都应该是闭包,毕竟在 ECMAScript 2017 (ECMA-262 8th) 中,每个 FunctionExpression 算法都定义了设置 closure 的步骤。但在实际中,出于优化的目的,当函数没有使用自由变量时,实现层可能不会保存 parent scope chain(对此标准中没有给出明确的规定)。

闭包是指可以包含自由变量的代码块,而在一个作用域使用未在该作用域声明(即在其他作用域声明的变量),该变量即为自由变量。
div1.onclick中的a就是自由变量,所以就形成了闭包。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题