首页 > 其他分享 >非严格模式下color被泄漏到全局作用域中,创建一个全局变量;严格模式下抛出ReferenceError异常

非严格模式下color被泄漏到全局作用域中,创建一个全局变量;严格模式下抛出ReferenceError异常

时间:2023-11-15 22:23:06浏览次数:27  
标签:box obj 作用域 模式 严格 red 全局 color

请问在非严格模式下以下JS代码最终的输出是什么?

function change(obj) {
  with(obj) {
    color = 'red'
  }
}
var box = {
  size: '15*15'
}
change(box);
console.log(color);

A
undefined

B
null

C
red

D
报错

正确答案:C

需要明确with会创建一个新的作用域,由于box本身没有color这个变量,所以这个操作相当于往全局定义了一个值为red的全局变量,而不是在box对象中定义,因此可以全局访问color。

with 代码块内部,每个变量首先会指向 obj 对象属性,所以color = 'red' 可以等效于obj.color = red

但是obj身上并没有color这个属性,于是去change函数的作用域寻找color但也没有找到,

最后在全局作用域没有color的情况下,于是直接设置 全局.color = 'red'

这就是数据泄漏的过程,经过一通操作,color泄露到全局

非严格模式下color被泄漏到全局作用域中,创建一个全局变量;严格模式下抛出ReferenceError异常

标签:box,obj,作用域,模式,严格,red,全局,color
From: https://www.cnblogs.com/longmo666/p/17834976.html

相关文章

  • 11月15日函数作用域和闭包函数
    目录1.函数作用域1.全局作用域(GlobalScope):2.闭包函数1.函数作用域js内的函数作用域与python内的作用域是一样的。查找顺序:首先在函数内部查找变量,找不到则到外层函数查找,逐步找到最外层。1.全局作用域(GlobalScope):全局作用域是在整个程序中都可以访问的作用域。......
  • 终于有人把VMware虚拟机三种网络模式讲清楚了!
    前段时间VMware更新了,你用上最新版了吗?有几个网工在操作中遇到过各种各样的问题。比如说由于公司服务器重启导致出现下面的问题:在Xshell里连接虚拟机映射时连接失败;能够连接上虚拟机的映射地址,但gitpull时报错无法解析hostname……其实这些都是ip问题导致的,但主要还是虚拟机的网络......
  • JS中的作用域Scope、范围链Scope Chain以及范围链和调用栈的区别
    作用域Scope范围链ScopeChain 范围链和调用栈的区别关键点:范围链与调用顺序无关始终从定义分析:只含本范围与父范围所能访问的变量 ......
  • 闭包函数:1.函数内部定义函数 2.内部函数使用了非它作用域的参数。
    执行以下程序,输出结果为()functionouter(){varnum=0;functioninner(){num++;console.log(num);}returninner;}varf1=outer();f1();f1();varf2=outer();f2();f2();A1234B111......
  • 每日随笔——桥接模式
    [实验任务一]:两个维度的桥接模式用桥接模式实现在路上开车这个问题,其中,车可以是car或bus,路可以是水泥路或沥青路。实验要求:1.画出对应的类图;2.提交源代码;3.注意编程规范。类图: 源码:BUSpackagesc9;publicclassBusimplementsTransport{@Overridepub......
  • Android app的暗黑模式适配实现
    原文地址:Androidapp的暗黑模式适配实现-Stars-One的杂货小窝很久之前放在草稿箱的一篇简单笔记,是之前蓝奏云批量下载工具Android版本实现暗黑主题的适配记录本文所说的这里的暗黑主题,应该只支持Android10系统,不过我手头的Flyme系统(Android9)上测试也有效果,其他低版本......
  • Java基础知识回顾10-代理模式
    一、简介代理模式是为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介作用。抽象角色:通过接口或抽象类声明真实角色实现的业务方法。代理角色:实现抽象角色,是真实角色的代理,通过......
  • 块设备的工作模式
    块设备的mknod还是会创建在/dev路径下面,这一点和字符设备一样。/dev路径下面是devtmpfs文件系统。这是块设备遇到的第一个文件系统。我们会为这个块设备文件,分配一个特殊的inode,这一点和字符设备也是一样的。只不过字符设备走S_ISCHR这个分支,对应inode的file_operation......
  • 虚拟机三种网络连接模式
    虚拟机中通常有三种网络连接模式:桥接模式、NAT模式和仅主机模式。桥接模式:在此模式下,虚拟机与主机共享同一个网络,这样虚拟机就可以直接访问网络中的其他设备,如路由器、交换机等,同时也可以让这些设备直接访问到虚拟机。桥接模式用到的网卡通常是VMnet0。NAT模式:NAT(网络地址转换)模......
  • 行为型模式-访问者模式
    1什么是访问者模式访问者模式(VisitorPattern)是一种行为型设计模式,它允许在不改变数据结构的前提下定义作用于数据结构元素的新操作。使用访问者模式,可以将数据结构和数据操作相分离,从而使得数据结构的修改和数据操作的增加变得更加容易。在访问者模式中,包括以下几个核心角色:......