在最外层定义的变量具有全局作用域,并且可以访问任何内部函数。局部作用域只有内部函数定义的变量。在函数中定义变量时使用var。
由于Js没有块级作用域,因此在执行循环后,可以使用相同作用域中的代码获得for循环中的i。
js的范围是相对于函数的,并且是函数的范围。
js作用域链:
执行每个函数都会生成一个执行环境。因为全局运行时环境是最外部的运行时环境,并且被视为窗口对象,所以所有全局变量和函数都被创建为窗口对象的属性和方法。调用函数时,函数的可变环境对象将插入环境堆栈中。
函数执行后,堆栈显示函数的变量对象,并将控制权传递给先前的执行环境变量对象。
js如何扩展覆盖范围链?
有以下三种语句可以增强作用域链。trycatch。并且;评估
trycatch catch和with语句将变量对象添加到作用域链的前端。
对于with语句,将指定的对象添加到作用域链。在catch语句的情况下,将创建一个新的变量对象,其中包含要调用的非法对象的声明,并且可以将其分配为eval。给定变量,在分配值后,由于找到了变量eval,因此变量的范围也可以扩展。
范例:
Varx = 1,evalg = eval;
函数(){
Varx = 3;
Eval(“警告(x)”); // 3
Evalg(“警告(x)”); // 1
