由于是JAVA出身, 编程习惯于面向对象, 总是对类这个东西有着执念( 真爱)!
开始接触js, 写着这样的代码
function f() {
点点点
}
function d() {
点点点
}
总感觉函数式的语言是不是少了什么, 于是Google一番, 才知道原来是自己见识短浅。。。
js的灵活程度之高让晚辈无法想象, 于是代码变成了这样
var a = function() {}
a.prototype.start = function() {}
a.prototype.end = function() {}
这就有点面向对象编程的习惯了, 出现了类!
如果喜欢封装, 那代码就变这样了、
var a = function() {}
a.prototype = {
start: function() {},
end: function() {},
}
终于要讲到闭包了, 在js中, 函数是一等对象,
他们可以储存可以作为参数传给其他函数, 还可以作为返回值传从其他函数传出,
甚至可以在运行时进行构造。 可是有一个问题就迎面而来, 既然js是函数式语言,
那么局部变量的值如何在另一个函数中去使用呢, 总不能所有变量都是全局变量--/
于是有了这样的代码
var scope = "123";
var a = function checkscope() {
var scope = 12;
function f() {
var scope = 13;
return d;
}
function d() {
var scope = 14;
return scope;
}
return d;
}
a()();
运行结果是14, 闭包就这么悄无声息的来了。
js的链特性让d函数链下的scope值在有了return后不会被垃圾回收清理,
一直存在的链式特性就是闭包实现的精华所在, 可能习惯了java的同学会
一时难以接受这个事实, 平时天下无敌的gc() 大哥居然。。。!。。。!
不去考虑底层, 这里的难题还有作用域。 this的使用。。 js的易变性。。 继承等等等
0 - 0! 搞局dota下次聊