js的闭包一定会return一个函数吗?如果是的话,这个闭包这么理解

funciton assignHandler(){
    var element = document.getElementById("id")
    element.onclick = function(){
        alert(element.id)
    }
}
阅读 3k
2 个回答

答: 不需要返回函数

解:
闭包可以理解为:“定义在一个函数内部的函数”。内部的函数可以访问外部函数的变量,形成一个词法环境的组合。

即:

function init() {
    var name = "jason"; // 局部变量
    function showName() { // 内部函数,一个闭包
        alert(name); // 使用了父函数中声明的变量
    }
    showName();
}
init();

无论 showName 是否返回这个闭包已经形成了,这表示的是一种状态。

比较简单的理解,在var声明变量的这种语法环境中(es5..),一个{}包裹的就是一个闭包作用域,层层嵌套,内部的会向上追踪,所以
for(var i;;){ setInterval(foo{ i }) }这个定时器的i在()里面是不能直接固定的

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