作用域跟函数紧密相关。每个函数就是一个作用域,同时包括一个全局的作用域。作用域有上下级关系,子作用域可以访问到父作用域的变量跟函数,但是父作用域无法访问到子作用域的变量跟函数(这里说的访问是直接访问,通过闭包是可以间接访问到的)。
js中一切都是对象,除了基本值类型之外。其他都是object。函数是一种特殊的对象,因为对象都是由函数生成的。
执行上下文,每执行一次函数便会产生一个新的执行上下文。浏览器中全局的执行上下文是window。每执行一次函数便有新的执行上下文入栈。理想的环境中,从window执行上下文,到整个代码执行完成后,上下文都应该是压栈出栈的。但是因为有闭包的存在,可能存在函数执行完了,却没有被释放掉的情况。注意:每执行一个函数都会产生一个执行上下文。执行上下文可以理解为一片内存区域,每次函数执行都要为之开辟一片内存区域。内存区域里面存放的变量等构成了一个执行上下文。
在一个对象中,寻找某个属性或方法时,会在对象的函数定义中查找,如果找到则停止寻找,否则在它的原型中寻找。如果原型是一个对象,那么将循环上述的步骤,在原型中寻找直到Object为止。如果没找到则会抛出异常。