function fun(n, o) { // ①
console.log(o);
return { // ②
fun: function(m) { // ③
return fun(m, n); // ④
}
};
}
// 第一个例子
var a = fun(0); // 返回undefined
a.fun(1); // 返回 ?
a.fun(2); // 返回 ?
a.fun(3); // 返回 ?
// 第二个例子
var b = fun(0)
.fun(1)
.fun(2)
.fun(3); //undefined,?,?,?
// 第三个例子
var c = fun(0).fun(1);
c.fun(2);
c.fun(3); //undefined,?,?,?
先大致说一下这个函数的执行过程:
① 初始化一个具名函数,具名函数就是有名字的函数,名字叫 fun。
② 第一个 fun 具名函数执行之后会返回一个对象字面量表达式,即返回一个新的object对象。
{ // 这是一个对象,这是对象字面量表达式创建对象的写法,例如{a:11,b:22} fun: function(m) {
return fun(m, n);
} } ③ 返回的对象里面含有fun这个属性,并且这个属性里面存放的是一个新创建匿名函数表达式function(m) {}。
④ 在③里面创建的匿名函数会返回一个叫 fun 的具名函数return fun(m, n);,这里需要说明一下这个 fun 函数返回之后的执行过程:
所谓闭包:各种解释都有,但都不是很接地气,简单的来说就是在 js 里面,有一些变量(内存)可以被不断的引用,导致了变量(内存)没有被释放和回收,从而形成了一个独立的存在,这里涉及了js 的作用域链和 js 回收机制,结合两者来理解就可以了。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/179493.html原文链接:https://javaforall.cn