🌺前言
js的闭包的一些特性
1.闭包的发生时机:
- 闭包本质是一个函数,是指那些引用了另一个函数作用域的变量的函数,通常是嵌套函数实现的.
- 闭包引用那个变量的函数上下文不会立即销毁,除非闭包被销毁.但是执行上下文的作用域链,会在执行完,立马销毁.
javascript
function a() {
let a = null
return function () {
a = 2
}
}
a()
2.闭包的意义:
- 延长了变量的生命周期.
- 创建私有环境
3.执行期上下文
执行期上下文分为全局执行期上下文、函数执行期上下文、eval的执行期上下文,这里总结前两种。- 全局执行期上下文:只有一个,称为GO。
- 函数执行期上下文:基于函数定义时的上下文,在被调用或执行前去创建自己的执行期上下文,即为自己的AO。注意:函数执行期上下文由在哪里定义决定,而不是调用时决定。 3.执行期上下文生成过程
• 函数调用前基于函数定义时的作用域链创建自己的AO(执行期上下文),置于作用域链的组顶端 • 查找函数内声明的变量和形参,其值为undefined • 把形参的值变为实参 • 查找函数内的函数声明,其值为函数体
函数不能直接访问其他函数的this和arguments
javascript
var name = 'the window';
var obj = {
name:'my obj',
getNameFunc(){
return function(){
return this.name
}
}
}
console.log(obj.getNameFunc()())//the window
javascript
var name = 'the window';
var obj = {
name:'my obj',
getNameFunc(){
var that = this
return function(){
return that.name
}
}
}
console.log(obj.getNameFunc()())//my obj
javascript
var name = 'the window';
var obj = {
name:'my obj',
getNameFunc(){
const a = 'eee'
return function(){
return a
}
}
}
console.log(obj.getNameFunc()())//eee
目录
文章最后更新于 2024-08-30 16:34:02
作者:徐徐版权声明:转载请注明文章出处
留言

~~空空如也