zoukankan      html  css  js  c++  java
  • [Effective JavaScript 笔记]第16条:避免使用eval创建局部变量

    js中的eval函数是一个强大、灵活的工具。强大的工具容易被滥用,所以了解是值得的。(本人只用过它来处理json数据)。
    错误使用eval函数的方式一:允许它干扰作用域。
    调用eval函数会将其参数作为js程序进行解释。
    该程序运行于调用者的局部作用域中,嵌入到程序的全局变量会被创建为调用程序的局部变量
    1463737769228
    此var声明语句与将其直接放置在函数体中的行为是不同的。
    1463737898365
    直接放入的变量声明,会有变量声明的提升。
    通过eval放入的,只有当eval函数被调用时此var声明语句才会被调用。变量才会加入到作用域。

    基于作用域决定程序的动态行为,会导致即使简单地理解变量是如何绑定的都需要了解程序执行的细节。当源代码将未在局部作用域内定义的变量传递给eval函数时,程序将变得很脆弱,结构很容易被破坏。
    1463738727344
    赋予外部调用者能改变函数内部作用域的能力。期望eval函数能修改自身包含的作用域对ES5严格模式的兼容性也是不好的。ES5严格模式将eval函数运行在一个嵌套的作用域中以防止这种污染。
    保证eval函数不影响外部作用域的一个简单方法是在一个明确的嵌套作用域中运行它。(这样可以不破坏,外部函数的实际功能)
    1463738950728

    提示

    • 避免使用eval函数创建的变量污染调用者的作用域

    • 如果eval函数代码可能创建全局变量,将此调用封装到嵌套的函数中以防止作用域污染。

  • 相关阅读:
    8进阶、M语言对Simulink模型的自动化操作及配置
    7进阶、Simulink回调函数
    6基础、Simulink模型保存为图片
    PCAN-USB
    Unix-Linux编程实践 学习点滴
    学一点吧
    VM中ubuntu已经正确配置了静态IP仍无法上网
    Linux在向磁盘新建文件的时候在系统层面的四步操作
    如何更有人缘?
    我的第一个javascript网页作业
  • 原文地址:https://www.cnblogs.com/wengxuesong/p/5513097.html
Copyright © 2011-2022 走看看