• js改变作用域链


    js有两种作用域:全局和局部

    在最外层定义的变量拥有全局作用域,对任何内部函数来说,都是可以访问的;而局部作用域则只有内部函数定义的变量才拥有;在函数内部定义变量时,要使用var,否则定义的变量时全局变量

    js是没有块级作用域的,因此for循环中的i在执行完循环后,还可以被同作用域的代码获取。js的作用域都是相对于函数而言,是函数作用域。

    js的作用域链:

    每个函数执行都会生成一个执行环境,全局执行环境是最外围的执行环境且被认为是window对象,因此所有全局变量和函数都会作为window对象的属性和方法而被创建;当一个函数被调用时,该函数环境的变量对象就会被压入一个环境栈中。而在函数执行之后,栈将该函数的变量对象弹出,把控制权交给之前的执行环境变量对象

    js如何来延长作用域链:

    有三种语句可以加强作用域链:try catch;with;eval

    trycatch中的catch和with语句都会在作用域链的前端添加一个变量对象。对with语句来说,将指定的对象添加到作用域链中,对catch语句来说,会创建一个新的变量对象,其中包含的是被抛出的错误对象的声明,而eval由于可以被赋值给变量,在被赋值的时候会将eval所处的变量作用域也赋值过去,所以可以使得作用域获得扩展。

    eg:

    var x=1,evalg=eval;

    function a(){

      var x=3;

      eval("alert(x)");//3

      evalg("alert(x)");//1

    }

  • 相关阅读:
    Delphi中的接口和抽象类
    设计模式之六大原则
    C 标准库
    linux 管道和重定向
    linux c创建静态库(.a)
    一个C语言程序
    C#动态创建lambda表达式
    linq中order by 和group by (含lambda表达式实现)以及综合案例
    微信扫码登陆原理
    二维码扫码支付原理
  • 原文地址:https://www.cnblogs.com/runhua/p/9576427.html
Copyright © 2020-2023  润新知