JavaScript高级(六)---with和eval函数

with

作用域只有全局作用域和函数作用域(块作用域暂时不提及), 使用with后有一个单独的作用域。不建议使用with语句,因为它可能是混淆错误和兼容性问题的根源。

javascript 复制代码
    
    var message = "hello";
    var obj = {
        name: "malong",
        message:"malong obj"
    }
       
    // 使用with 后会形成一个单独的作用域
    with(obj) {
        console.log(message) //会打印 malong obj
    }
    

eval

eval是一个特殊的函数,它可以将传入的字符串当做JavaScript代码来运行。

  • 不建议在开发中使用eval
    • 可读性很差

    • 存在安全问题,eval是一个字符串,在执行的过程中如果被恶意篡改,会造成安全问题

    • eval的执行必须经过JS解释器,不能被JS引擎优化

      javascript 复制代码
          var str = ' var msg = "test"; console.log("malong" + msg)'
      
          eval(str)

严格模式 ues strict

严格模式很好理解,是一种具有限制性的JavaScript模式,从而使代码隐式的脱离了 "懒散(sloppy)模式"。支持严格模式的浏览器在检测到代码中有严格模式时,会以更加严格的方式对代码进行检测和执行;

  • 严格模式分类
    • 全局严格
    • 局部严格
  • 严格模式的好处
    • 消除代码运行的一些不安全之处,保证代码运行的安全;
    • 提高编译器效率,增加运行速度;
    • 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
  • 严格模式对JavaScript语义进行了一些限制
    • 严格模式通过抛出错误来消除一些原有的静默(silent)错误
    • 严格模式让JS引擎在执行代码的时候得到更多的优化(不需要对特殊的代码进行处理)
    • 严格模式禁用了在ECMAScript未来版本中可能会定义的一些语法
  • 严格模式具体的一些限制
    *
    1. 无法意外的创建全局变量
      1. 严格模式会使引起静默失败(silently fail,注:不报错也没有任何效果)的赋值操作抛出异常
      1. 严格模式下试图删除不可删除的属性
      1. 严格模式不允许函数参数有相同的名称
      1. 不允许0的八进制语法
      1. 在严格模式下,不允许使用with
      1. 在严格模式下,eval不再为上层引用变量
      1. 严格模式下,this绑定不会默认转成对象
      • 严格模式下,setTimeout中的this还是指向window,这跟浏览器有关,有想研究的可以看一下浏览器源码,文件很大。而且对于我们来说,setTimeout是怎么执行的我们也不知道,这种我们称为黑盒子,但是其实我的猜想是通过apply调用触发的函数的自执行。
复制代码
相关推荐
万粉变现经纪人几秒前
如何解决 pip install llama-cpp-python 报错 未安装 CMake/Ninja 或 CPU 不支持 AVX 问题
开发语言·python·开源·aigc·pip·ai写作·llama
清风明月一壶酒13 分钟前
OpenClaw自动处理Word文档全流程
开发语言·c#·word
其实防守也摸鱼17 分钟前
CTF密码学综合教学指南--第五章
开发语言·网络·笔记·python·安全·网络安全·密码学
小郑加油1 小时前
python学习Day12:pandas安装与实际运用
开发语言·python·学习
AC赳赳老秦1 小时前
投标合规提效:用 OpenClaw 实现标书 / 合同自动审核、关键词校验、格式优化,降低废标风险
开发语言·前端·python·eclipse·emacs·deepseek·openclaw
kyriewen1 小时前
代码写成一锅粥?3个设计模式让你的项目“起死回生”
前端·javascript·设计模式
不会敲代码12 小时前
从零搭建 AI 日记助手:用 Milvus 向量数据库实现语义搜索
javascript·openai
KuaCpp2 小时前
C++面向对象(速过复习版)
开发语言·c++
wbs_scy2 小时前
Linux线程同步与互斥(三):线程同步深度解析之POSIX 信号量与环形队列生产者消费者模型,从原理到源码彻底吃透
java·开发语言
2zcode2 小时前
基于MATLAB元胞自动机(CA)的AZ80A镁合金动态再结晶(DRX)过程模拟
开发语言·matlab·动态再结晶