1. 匿名函数执行环境具有全局性
var name = 'window'
var object = {
name: 'my object',
getNameFun: function (){
console.log(this) // object
return function () {
console.log(this) // 匿名函数执行环境具有全局性 this指向window
return this.name
}
}
}
console.log(object.getNameFun()()) // window
2. 闭包内存泄漏
<div class="test" id='test'>test</div>
<script>
(function click () {
var element = document.getElementsByClassName('test')[0]
element.onclick = function () {
console.log(element.id) // test
}
})()
</script>
外部函数嵌套内部函数,内部函数引用外部函数的 element~内部函数使用element 后,仍然保留内存,所以占用内存空间~
解决方法:
<div class="test" id='test'>test</div>
<script>
(function click () {
var element = document.getElementsByClassName('test')[0]
var id = element.id
element.onclick = function () {
console.log(id) // test
}
element = null // 使用后置为空
})()
3. 初始化未经声明的变量,会被创建成全局变量
4. javascript本身没有块级作用域的概念,使用闭包可以在javascript中模仿块级作用域。要点如下:
(1)创建一个立即调用函数,这样既可以执行其中函数的代码,也不会在内存中留下对该函数的引用
(2)结果就是函数内部的变量执行完之后被立即销毁