作用域链与原型链的区别与联系

作用域

先来看一段代码:

name=”lwy”;
function t(){
var name=”tlwy”;
function s(){
var name=”slwy”;
console.log(name);
}
function ss(){
console.log(name);
}
s();
ss();
}
t();

当执行s时,将创建函数s的执行环境(调用对象),并将该对象置于链表开>头,然后将函数t的调用对象链接在之后,最后是全局对象。然后从链表开头寻找变量name,很明显
name是”slwy”。
但执行ss()时,作用域链是: ss()->t()->window,所以name是”tlwy”

原型链

当查找一个对象的属性时,JavaScript 会向上遍历原型链,直到找到给定名称的属性为止,到查找到达原型链的顶部(也就是 Object.prototype),如果仍然没有找到指定的属性,就会返回 undefined。

区别:1. 作用域是对于变量而言,原型链是对于对象的属性。
           2. 作用域链顶层是window,原型链顶层是Object。
联系:从链表开头寻找,直到找到为止。

你可能感兴趣的:(js基础知识详解)