如何才能通俗易懂的解释js里面的‘闭包’?( 二 )


3. "JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里 。" ——《JavaScript权威指南》
这句话对闭包中对变量的引用的理解很有帮助 。我们看下面的例子:
var name = 'Schopenhauer'function getName () { console.log(name)}function myName () { var name = 'wangxi' getName()}myName() // Schopenhauer如果执行 myName() 输出的结果和你想象的不一样,你就要再回去看看上面说的这句话了,
JavaScript 中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里
执行 myName,函数内部执行了 getName,而 getName 是在全局环境下定义的,因此尽管在 myName 中定义了变量 name,对getName 的执行并无影响,getName 中打印的依然是全局作用域下的 name 。
我们稍微改一下代码:
var name = 'Schopenhauer'function getName () {var name = 'Aristotle' var intro = function() { // 这是一个闭包 console.log('I am ' + name) } return intro}function showMyName () { var name = 'wangxi' var myName = getName() myName()}showMyName() // I am Aristotle结果和你想象的一样吗?结果留作聪明的你自己分析~
以上就是对 js 中闭包的理解,如果有误,欢迎指正 。最后引用一段知乎问题下关于闭包概念的一个回答 。


推荐阅读