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 中闭包的理解,如果有误,欢迎指正 。最后引用一段知乎问题下关于闭包概念的一个回答 。
(
推荐阅读
- 如何快速搭建日志系统
- 如何构建Google搜索自动完成功能
- 如何开淘宝网店的步骤手机 怎么用手机淘宝开店铺
- 双开门冰箱如何选购
- EC6价格能打,筹备电池资产公司,满血复活的蔚来如何加电?
- 如何穿得清凉又有型?10个搭配风格,时尚达人般的衣风你也能拥有
- 给花换盆拿不出来怎么办,花盆不砸如何换盆
- 养生之道 跟庄子学习如何养生保健
- 武夷山正山小种红茶功效如何
- 淘宝商家退店流程 淘宝网店如何退店