分类
精读JS高级程序设计

第四章变量、作用域

变量、作用域

检测类型

  • typeof是确定一个变量是字符串、数值、布尔值还是undefined的最佳工具。
  • instanceof根据原型链来判断一个变量是否是给定的应用类型。它的问题在于,如果一个页面存在多个窗体则会存在多个Object,Array等构造函数,造成跨窗体的对象检测存在问题。
  • Array.isArray()可以解决上面instanceof的问题,但只能检测数组。
  • Object.prototype.toString.call(obj)可以比较好的判断类型,返回”[object type]”type是对应的类型。

执行环境与作用域

执行环境定义过了变量和函数有权访问的其它数据,决定了他们各自的行为,每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象上面。

某个执行环境重的所有代码执行完毕后,该环境被销毁,保存在其中的所有变量和函数也一并销毁(全局执行环境直到应用程序退出时才会被销毁)

当代码在一个环境中执行时,会创建变量对象的一个作用域链,作用域链的用途是保证对执行环境有权访问的所有变量和函数的有序访问,作用域的前端始终是当前执行代码所在的环境的变量对象,如果这个环境是函数,则将其活动对象作为变量对象,活动对象在最开始只包含一个变量,即arguments对象。作用域链中的下一个变量对象来自包含环境,而再下一个变量对象则来自下一个包含环境,这样,一直持续到全局执行环境。

标识符解析是沿着作用域链一级一级地搜索标识符的过程。

块级作用域

letconst关键字可以将变量绑定到所在的任意作用域中(通常是{…}内部),换句话说letconst为其声明的变量隐式地劫持了所在的快作用域。

发表评论

电子邮件地址不会被公开。 必填项已用*标注