zoukankan      html  css  js  c++  java
  • 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

    }

  • 相关阅读:
    VMware12中CentOS7网络设置
    技术牛人
    PHP程序员如何突破成长瓶颈(php开发三到四年)
    php多线程
    go git 安装配置与使用 (windows 7 64bit)
    php内核和瓦力上线部署
    VM虚拟机下安装Centos7.0图文教程
    php结合redis实现高并发下的抢购、秒杀功能
    php foreach循环中unset后续的键值问题
    excle导入
  • 原文地址:https://www.cnblogs.com/runhua/p/9576427.html
Copyright © 2011-2022 走看看