Web前端常遇面试题

2017-12-02  本文已影响0人  中華田園雞

JavaScript作用域链

执行一段JavaScript时 JS引擎会创建一作用域 又名 执行上下文(Execution Context) 页面加载时 首先创建一个全局作用域 然后每执行一个函数 会建立一个对应的作用域 ,从而形成作用域链 每个作用域都有一个作用域链 链头是全局作用域 链尾是当前函数作用域。
作用域链的作用时解析标识符 当函数被创建时 会将 thisarguments参数 和函数中的所有变量 添加到当前作用域中,比如当js需要查找一个变量X时 首先会从作用域链的链尾 查找X 如果没有找到 就顺着作用域继续查找 直到查找到链头 还没找到的话 则抛出(Reference)异常

JavaScript 原型链

对象类型
普通对象
__proto__属性 (指向其原型链)没有prototype属性

普通对象示例
var o1=new f1();
var o2={};
var o3=new Object();

函数对象
通过new Function()创建的对象都是函数对象
拥有__proto_属性和prototype属性
Function Object Array Date String 自定义函数 都是函数对象

示例:
function f1(){};
var f2=function(){};
var f3=function("n1","n2","return n1+n2");
以上f1,f2,f3都是属于函数对象
特例: Function.prototype 是函数对象又是原型对象

原型对象
每创建一个函数都会有一个prototype属性,这个属性就是一个指针 指向一个对象 ,原型对象是包含特定类型的所有示例共享的属性和方法,原型对象的好处是 可以让所有实例对象共享他所包含的属性和方法
object.prototype原型对象 和 constructor属性(指向构造函数对象)
之前提到 原型对象属于普通对象 但是 Function.prototype是个例外 它是原型对象,又是函数对象,作为一个函数对象 它却又没有 prototype属性

原型对象示例
function myfunction(){};
myfunction.prototype;
其实原型对象就是构造函数的一个示例对象,myfunction.prototype就是myfunction的一个示例对象,相当于在myfunction创建的时候自动实例化了一个对象 并把这个对象赋值给了prototype属性
以下几个属性都是原型对象
Object.prototype

<pre>
function Cat(){}
Cat.prototype.name=""
</pre>

上一篇下一篇

猜你喜欢

热点阅读