前端零碎

js作用域与闭包

2020-01-13  本文已影响0人  鸡毛菜菜子

全局作用域只有一个,每个函数又都有作用域(环境)。

作用域可以从内部向外部查找,但是不能从外部向内部查找

1.全局函数,全局环境不会被回收,也可以渗透到函数里,可以被使用。

2.函数作用域,只有该函数体内可以使用。每被调用一次都会新开辟一个内存空间,在调用结束之后被摧毁。也就是说一般情况下,函数执行形成一个私有的作用域,当执行完成后就销毁了->节省内存空间。

3.如果环境定义的属性一直被使用,内存空间就不会被释放。

变量之间赋值是给值,对象赋值是给内存指针

构造函数也是很好的环境例子,子函数被外部使用父级环境将被保留

块级作用域可以简单理解为{},只对let、const声明的变量有效,对var声明的无效。

闭包指子函数可以访问外部作用域变量的函数特性,即使在子函数作用域外也可以访问父函数。如果没有闭包那么在处理事件绑定,异步请求时都会变得困难。JS中的所有函数都是闭包闭包一般在子函数本身作用域以外执行,即延伸作用域。

如图一所示,红色框内可以使用蓝色框里的变量,蓝色框无法使用红色框变量,也就是子函数可以访问外部作用域变量的函数特性。

this指向

this 总是指向调用该函数的对象,即函数在搜索this时只会搜索到当前活动对象下面是函数因为是在全局环境下调用的,所以this指向window,这不是我们想要的。

前,指向window 后,指向函数

就是面向字面量函数中属性中定义的子函数,子函数的this指向window。

上一篇下一篇

猜你喜欢

热点阅读