Deep BlueVBScriptWMIPHPC语言JavaScriptWindows API路由器Windows函数Python | JavaScript中的闭包(closures)今天有个不明真相的同学跟我说JavaScript很简单,我顿时感到压力很大。曾经我也是这么认为的,直到有一天无意中看了一下JQuery的源码,才发现我根本不懂JavaScript。正如《说说掌握JavaScript语言的思想前提》里所说:
任何一门语言,无论它多么简单,都不是一天两天就能掌握的,无论是VBScript,还是JavaScript,抑或是其他。才学了几天就说JavaScript很简单,这只能显得你很肤浅。懂得基本的语法,并不等于懂得这门语言。 《JavaScript The Definitive Guide, 5th Edition》里有段话:
闭包是一种有趣而强大的技术。虽然它们在日常的JavaScript编程中不经常使用,但是依然值得你去了解它们。如果你理解了闭包、作用域链和函数的call对象,那么你就可以真正自称为高级JavaScript程序员了。
书上举的闭包的一个简单例子: uniqueID = (function() { var id = 0; return function() { return id++; }; })(); 《学习Javascript闭包(Closure)》最后给了道思考题: var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ return function(){ return this.name; }; } }; WScript.Echo(object.getNameFunc()()); var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ var that = this; return function(){ return that.name; }; } }; WScript.Echo(object.getNameFunc()()); 纠结了半天总算弄懂了。 |