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

    }

  • 相关阅读:
    【python】requests库
    pycharm新建项目时选择virtualenv的说明
    cookie、session、token
    读写锁--DEMO
    锁降级--防止线程安全问题
    mysql-left join
    index-document-shard
    ES-常见搜索方式
    SpringBoot在自定义类中调用service层等Spring其他层
    mongodb crud
  • 原文地址:https://www.cnblogs.com/runhua/p/9576427.html
Copyright © 2011-2022 走看看