位置:首页 > web前端 > javascript

js中作用域链、闭包、原型链指的是什么

dearweb 发布:2021-07-20 13:01:40阅读:

今天小编主要和大家探讨一下js的作用域链、闭包、原型链,希望能够让你有所收获,下面我们一起来看看吧。

作用域链

内部环境可以通过作用域链来访问外部环境的属性和方法,但是,外部环境不能访问内部环境的任何属性和方法。只能通过定义函数来延长作用域链条。

function books(){
    var book = '书包里面的书本'
    return function(){
        console.log(book)
    }
}

var bag = books();
bag();

全局执行上下文 = {作用域链:{全局变量对象},{变量对象:books,bag}}

books执行上下文 = {作用域链:{books变量对象+全局变量对象},{变量对象:book}}

匿名函数执行上下文 = {作用域链:{匿名函数变量对象+books变量对象+全局变量对象},{变量对象:""}}

image.png

for(var i=0;i<5;i++){
    setTimeout(()=>{
        console.log(i)
    },4000)
}
console.log(i)  // 5


for(var i=0;i<5;i++){
(function(x){
setTimeout(()=>{
        console.log(x++)
    },4000)
})(x)
    
}
console.log(i)  // 01234

闭包

闭包就是能够读取其他函数内部变量的函数。由于在 Javascript 语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。它的最大用处有两个,可以读取函数内部的变量;让这些变量的值始终保持在内存中

原型链

原型:所有的函数都有一个特殊的属性 prototype(原型),prototype 属性是一个指针,指向的是一个对象(原型对象),原型对象中的方法和属性都可以被函数的实例所共享。所谓的函数实例是指以函数作为构造函数创建的对象,这些对象实例都可以共享构造函数的原型的方法。

原型链:原型链是用于查找引用类型(对象)的属性,查找属性会沿着原型链依次进行,如果找到该属性会停止搜索并做相应的操作,否则将会沿着原型链依次查找直到结尾。常见的应用是用在创建对象和继承中。

如果你想更深入了解原型及原型链的概念可以看我写过的这篇文章原型和原型链的理解


24人点赞 返回栏目 提问 分享一波

小礼物走一波,支持作者

还没有人赞赏,支持一波吧

留言(问题紧急可添加微信 xxl18963067593) 评论仅代表网友个人 留言列表

暂无留言,快来抢沙发吧!

本刊热文
网友在读
手机扫码查看 手机扫码查看