JavaScript执行环境和作用域

来源:互联网 发布:方舟网络错误信息 编辑:程序博客网 时间:2024/06/07 00:45

执行环境和作用域
1.执行环境定义了变量或函数有权访问的其他数据,决定他们各自的行为。每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都会保存在这个对象中。
2.全局执行环境是外围的一个执行环境
3.每个函数都有自己的执行环境。(环境栈)
4.当代码在一个环境中执行时,会创建变量对象的一个作用域链。
5.作用域链的作用是保证对执行环境中有权访问的所有变量和函数的有序访问。
6.标识符解析是沿着作用域链一级一级的搜索标识符的过程。
7.延长作用域链
8.执行环境的类型只有全局和局部
9.可以在作用域链前端临时增加一个变量对象,该变量对象会在执行代码后被移除,具体就是当执行流进入下列任何一个语句时,作用域链就会得到加长:
(1)try-catch语句的catch块 (会创建一个新的变量对象,其中包含的是被抛出的错误对象的声明)
(2)with语句(会将指定的对象添加到作用域链中)
这两个语句都会在作用域链前端添加一个变量对象,
10.javascript没有块级作用域
(1)使用var声明的变量会自动被添加到最近的环境中,在函数内部,最接近的环境就是函数的局部变量;在with语句中,最接近的环境是函数环境。如果初始化变量时没有使用var声明,该变量会自动被添加到全局环境中
(2)javascript中,一定要先声明变量,在对变量进行初始化,在严格模式下,初始化未声明的变量会导致错误。
11.查询标识符
在局部或全局中读取或写入来引用一个标识符,必须通过搜索来确定这个标识符代表什么,搜索过程从作用域链前端开始,向上逐级查询与给定的名字匹配的标识符,如果在局部环境中找到停止搜索,否则在全局中搜索,如果全局环境中还没有搜索到,就说明该变量没有声明。
12.instanceof和typeof关键字
(1)instanceof关键字用来检测某个引用类型
(2)typeof关键字用来检测变量是哪种基本的数据类型

0 0