首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么不能在全局窗口对象中定义不可配置的属性?

在全局窗口对象中定义不可配置的属性是不推荐的,原因如下:

  1. 全局窗口对象是指浏览器环境中的顶层对象,通常是window对象。在JavaScript中,全局变量和函数会被添加到全局对象中。然而,全局对象是一个非常特殊的对象,对其进行修改可能会导致意想不到的问题。
  2. 不可配置的属性是指该属性的配置项中的configurable属性值为false。这意味着该属性无法被删除,且无法通过Object.defineProperty()方法修改其特性。在全局窗口对象中定义不可配置的属性会导致无法删除或修改该属性,可能会对代码的维护和扩展造成困扰。
  3. 全局作用域是一个公共的命名空间,多个脚本文件可能会在同一个全局作用域中执行。如果在全局窗口对象中定义不可配置的属性,可能会导致不同脚本文件之间的命名冲突和意外的覆盖。
  4. 全局作用域中的变量和函数容易被误用或滥用,可能会导致代码的可读性和可维护性下降。推荐使用模块化的方式来组织代码,避免在全局作用域中定义过多的变量和函数。

总结起来,不建议在全局窗口对象中定义不可配置的属性,因为这可能会引发命名冲突、代码维护困难等问题。更好的做法是使用模块化的方式组织代码,避免滥用全局作用域。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

web前端开发初学者十问集锦(4)

通过上面,我们发现原来还是有差别的,我们再用delete删除属性来验证下,配置性为false属性无法删除。...也就是通过变量var声明全局对象属性无法删除,我们还会发现和函数声明创建全局对象属性也无法删除。...JS变量申明:使用var关键字只申明,初始化; JS变量定义:使用var关键字或不使用var申明时并初始化。 JS变量使用规范:使用时先定义。...并且全局作用域中定义所有 JavaScript 全局对象、函数以及变量均自动成为浏览器模型(BOM)window 对象成员。...在JS通过 var/function声明对象因含有DontDelete属性,所以不可以使用delete来删除,即不可被删除。

1.3K20

Java多线程编程线程安全与最佳实践

临界资源:共享资源(同一对象),一次仅允许一个线程使用,才可保证其正确性。原子操作:不可分割多步操作,被视作一个整体,其顺序和步骤不可打乱或缺省。线程安全问题都是由全局变量及静态变量引起。...若每个线程全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则的话就可能影响线程安全。...多个线程对象 要使用同一把锁。注意:在任何时候,最多允许一个线程拥有同步锁,谁拿到锁就进入代码块,其他线程只能在外等着(BLOCKED)。...语法:synchronized 返回值类型 方法名称(形参列表){ //对当前对象(this)加锁// 代码(原子操作)}只有拥有对象互斥锁标记线程,才能进入该对象加锁同步方法。...对于static方法,我们使用当前方法所在类字节码对象(类名.class)。LockJDK5加入,与synchronized比较,显示定义,结构更灵活。提供更多实用性方法,功能更强大、性能更优越。

25920
  • 前端面经(1)

    使用 BOM,开发者可以移动窗口、改变状态栏文本以及执行其他与页面内容直接相关动作。 DOM 是指文档对象模型,通过它,可以访问HTML文档所有元素。 DOM 是 W3C标准。...新增symbol类型 表示独一无二值,用来定义独一无二对象属性名; 2. const/let 都是用来声明变量,不可重复声明,具有块级作用域。存在暂时性死区,也就是不存在变量提升。...2.另外,若不设置key还可能在列表更新时引发一些隐蔽bug 3. vue在使用相同标签名元素过渡切换时,也会使用到key属性,其目的也是为了让vue可以区分它们, 否则vue只会替换其内部属性而不会触发过渡效果...this指向 代表是当前上下文环境对象。在面向对象语言中this表示当前对象一个引用。但在JavaScriptthis是固定,它会随着环境改变而改变。...1) 在方法,this表示该方法所属对象 2) 在单独使用情况下,this代表全局对象 3) 在函数,this表示全局对象 4) 在函数但是在严格模式下,this为未定义(undefined

    50620

    死磕JS:var、let、const 该怎么选?

    函数体为 函数作用域, 任意一个 {} 内为一个 块级作用域 var 声明变量,在函数作用域 中生效,所以只有在函数声明变量属于局部变量,在代码块声明依然为全局变量。...,推荐省略关键字直接定义变量方式; 2、在严格模式下,不支持省略关键字直接定义变量方式; 3、var 可以重复声明,let 和 const 不可重复声明; 4、在全局作用域下,var 声明变量会成为...window 对象属性, let 和 const 不会; 3、定义在 window 全局变量,推荐使用 var 声明 或 省略关键字直接定义,推荐使用 window.message = 'hi'...message 被重新定义了,在预加载时候 message 作用域范围也就被框定了,message 变量不再属于全局变量,而是属于函数作用域,只不过赋值操作是在运行期执行(这就是为什么 Javascript...如果该变量为对象,那么修改这个对象内部属性是合法

    1.9K10

    02-微信小程序目录结构及配置

    微信小程序目录结构说明微信目录结构配置说明app.json 配置项window配置项restartStrategytabBar配置项创建一个自己页面真机调试微信目录结构了解微信小程序项目的目录以及一些文件用途在小程序...配置说明app.json 配置项app.json 文件用来对微信小程序进行全局配置,决定页面文件路径、窗口表现、设置网络超时时间、设置 tab 等。...文件内容为一个 JSON 对象,有以下属性配置属性类型必填描述最低版本entryPagePathstring否小程序默认启动首页pagesstring[]是页面路径列表windowObject否全局默认窗口表现...开发者工具基础库版本切到 1.7.0(代表最低版本,只供调试用)可方便切到旧视觉Windows 客户端 3.0 及以上版本,为了给用户提供更符合桌面软件使用体验,统一了小程序窗口导航栏,navigationStyle...tab 按数组顺序排序,每个项都是一个对象,其属性值如下:属性类型必填说明pagePathstring是页面路径,必须在 pages 定义textstring是tab 上按钮文字iconPathstring

    58510

    Conscript_const let var

    不可只是这个地址,即不能把foo指向另一个地址,但对象本身是可变,所以依然可以为其添加新属性。 下面是另一个例子。...window.a = 1; a // 1 a = 2; window.a // 2 上面代码,顶层对象属性赋值与全局变量赋值,是同一件事。...另一方面,window对象有实体含义,指的是浏览器窗口对象,顶层对象是一个有实体含义对象,也是不合适。...// undefined 上面代码全局变量a由var命令声明,所以它是顶层对象属性全局变量b由let命令声明,所以它不是顶层对象属性,返回undefined。...5.globalThis 对象 JavaScript 语言存在一个顶层对象,它提供全局环境(即全局作用域),所有代码都是在这个环境运行。但是,顶层对象在各种实现里面是统一

    39220

    let 和 const 命令

    不可只是这个地址,即不能把foo指向另一个地址,但对象本身是可变,所以依然可以为其添加新属性。 下面是另一个例子。...window.a = 1; a // 1 a = 2; window.a // 2 上面代码,顶层对象属性赋值与全局变量赋值,是同一件事。...另一方面,window对象有实体含义,指的是浏览器窗口对象,顶层对象是一个有实体含义对象,也是不合适。...// undefined 上面代码全局变量a由var命令声明,所以它是顶层对象属性全局变量b由let命令声明,所以它不是顶层对象属性,返回undefined。...# globalThis 对象 JavaScript 语言存在一个顶层对象,它提供全局环境(即全局作用域),所有代码都是在这个环境运行。但是,顶层对象在各种实现里面是统一

    96020

    let 和 const 命令

    image.png let命令,const命令 块级作用域,顶层对象属性,globalThis对象 let命令式用来声明变量,用法与var类似 let声明变量,只在命令所在代码块中有效 { let...,不能在块级作用域声明。...在浏览器环境指的是window对象 在 Node 指的是global对象 window.a = 1; a // 1 a = 2; window.a // 2 ES5 之中,顶层对象属性全局变量是等价...window对象有实体含义,指的是浏览器窗口对象,顶层对象是一个有实体含义对象,也是不合适。...var命令和function命令声明全局变量,依旧是顶层对象属性;另一方面规定,let命令、const命令、class命令声明全局变量,不属于顶层对象属性 var a = 1; // 如果在

    73920

    Vue总汇

    ,如果是字符串必须使用引号引起来 既可以绑定原生属性,也可以绑定自定义属性,一般情况下,自定义属性用来组件通信 v-on 绑定事件指令 简写"@" ,用来处理事件响应操作写在methods里定义函数...官方推荐使用下标,且不可以使用时间戳,随机数。...v-model 组件 局部组件 在单独vue文件里使用components注册组件 只能在当前组件内使用,叫做局部组件 全局组件 使用全局Vue对象component方法注册组件 可以在任意...props会报错,但是如果修改值是对象和数组里值,不会报错 4.定义:props是上游组件传递数据,子组件不可修改 5.props是父传子最常见通信方式 props父传子 父组件向子组件通过绑定属性传递一个数据...路由三大组件部分 导航 router-link 视图 router-view 配置 router 路由router 表示当前项目全局路由实例对象 线路route 表示当前路由页面的信息对象

    11110

    ECMAScript 6入门 - let和const命令详解

    与let命令相同 只在声明所在块级作用域内有效 声明不提升 存在暂时性死区,只能在声明位置后面使用 不可重复声明 只保证变量名指向地址不变,并不保证该地址数据不变 对于复合类型变量,变量名指向数据...全局对象属性 全局对象是最顶层对象,在浏览器环境指的是window对象,在Node.js指的是global对象。ES5之中,全局对象属性全局变量是等价。...window.a = 1; a // 1 a = 2; window.a // 2 上面代码全局对象属性赋值与全局变量赋值,是同一件事。...ES6为了改变这一点,一方面规定,var命令和function命令声明全局变量,依旧是全局对象属性;另一方面规定,let命令、const命令、class命令声明全局变量,不属于全局对象属性。...undefined 上面代码全局变量a由var命令声明,所以它是全局对象属性全局变量b由let命令声明,所以它不是全局对象属性,返回undefined。

    82850

    2021年web前端面试集锦

    使用 BOM,开发者可以移动窗口、改变状态栏文本以及执行其他与页面内容直接相关动作。 使 JavaScript 有能力与浏览器”对话”。 ...XML DOM 定义了所有 XML 元素对象属性,以及访问它们方法。 什么是 HTML DOM? HTML DOM 定义了所有 HTML 元素对象属性,以及访问它们方法。 二....this指向、new关键字 this对象是是执行上下文中一个属性,它指向最后一次调用这个方法对象,在全局函数,this等于window,而当函数被作为某个对象调用时,this等于那个对象。...在实际开发,this 指向可以通过四种调用模式来判断。 函数调用,当一个函数不是一个对象属性时,直接作为函数来调用时,this指向全局对象。...模块定义:module对象:在每一个模块,module对象代表该模块自身。 export属性:module对象一个属性,它向外提供接口。

    39730

    MQL5从入门到精通【第二章】变量与数据类型(四)

    Continued # 输入变量 Input Variables 输入变量是MQL5仅有的,可供用户修改数值变量。这些变量可由交易配置,指示器配置,止损收益配置等等组成。...这些变量展示在程序属性窗口。 输入变量由input关键字声明。放置在程序顶部,在所有程序代码和任意函数之前定义。输入变量可以是任意类型,包括枚举。但是数组和结构体不能用于输入变量。...静态输入变量值可以修改,但是在策略测试不可优化。静态输入变量仅在输入参数逻辑组合上有些意义。...,在程序属性窗口,这个输入变量值,可-以-下-拉-选-择!...为什么?因为变量varInt是在if语句内定义,if语句之外,不是其作用域。那样怎么改?

    96720

    C#——写一个控件库

    摘要: C#定义控件属性(Property)、事件(Event)及一些相关特性(Attribute)总结 今天学习了下C#用户控件开发添加自定义属性事件,主要参考了MSDN,总结并实验了一些用于开发自定义属性和事件特性..., EventArgs e) 自定义控件(直接继承自UserControl),如果添加这个属性,在编辑界面双击后进入事件是Load事件。...)]”标记属性,将不能在IDE自动显示。...但这也仅仅是不自动显示而已,如果在代码真的调用了不可属性,编译不会报错,运行也不会有问题。...参数为DesignerSerializationVisibility类型枚举: Hidden:代码生成器生成对象代码 Visible:代码生成器生成对象代码 Content:代码生成器产生对象内容代码

    1.8K41

    三、变量对象

    在JavaScript,肯定不可避免需要声明变量和函数,JS编译器是如何找到这些变量呢? 我们还得对执行上下文有一个进一步了解。...在变量对象以函数名建立一个属性属性值为指向该函数所在内存地址引用 三、检查当前上下文中变量声明,每找到一个变量声明,就在变量对象以变量名建立一个属性属性值为undefined 如果变量与函数同名...全局上下文变量对象 以浏览器为例,全局对象为window。全局上下文有一个特殊地方,它变量对象,就是window对象。而这个特殊,在this指向上也同样适用,this也是指向window。...,全局上下文生命周期,与程序生命周期一致,只要程序运行结束,比如关掉浏览器窗口全局上下文就会一直存在。...看看结果 不能在初始化之前访问a。 这个报错说明了什么问题呢?变量定义了,但是没有初始化。

    55530

    前端入门21-JavaScriptES6新特性声明正文-ES6新特性

    而使用上述三种方式,是给对象定义了一个属性名为 s1 但数据类型为 Symbol 属性,如果后期又定义了另一个属性名为 s1 Symbol 原始值属性,并不会覆盖之前定义属性。...,且全局变量本质上是全局对象属性,书中是这么评价: 顶层对象属性全局变量挂钩,被认为是 JavaScript 语言最大设计败笔之一。...另一方面,window对象有实体含义,指的是浏览器窗口对象,顶层对象是一个有实体含义对象,也是不合适。...换句话说,let 和 const 定义变量已经包含 var 定义变量各种特性行为了,比如:没有变量声明提前特性、存在暂时性死区(在定义之前不能使用,只能在定义变量位置之后使用)、不允许重复声明...js 文件全局变量这些并不会被添加到全局对象属性,其他 js 文件无法访问。

    50110

    前端学习资料整理

    this 在 JavaScript 主要由以下五种使用场景。 作为函数调用,this 绑定全局对象,浏览器环境全局对象为 window 。...可以把 props 看作是组件配置属性,在组件内部是不变,只是在调用这个组 件时候传入不同属性(比如这里 name)来定制显示这个组件。...frames array 列举窗口框架对象数组,按照这些对象在文档中出现顺序列出(该属性本身也是一个对象)   history 窗口历史列表(该属性本身也是一个对象)   length 窗口框架数...frame和window对象一个属性   self 当前窗口或框架同义词   status 状态条消息   top 包含当前框架最顶层浏览器窗口同义词   window 当前窗口或框架同义词...默认支持糟糕特性都会被禁用,比如不能用with,也不能在意外情况下给全局变量赋值; 全局变量显示声明,函数必须声明在顶层,不允许在非函数代码块内声明函数,arguments.callee也不允许使用

    3.5K20

    金九银十求职季,前端面试大全送给你

    21、this指向 this指向直接调用者 this指向new出来对象 在事件this指向这个事件对象 IEattachEventthis指向全局window this指的当前对象...对象和document对象 window对象是指浏览器打开窗口。...实例已完成以下配置:用上面编译好html内容替换el属性指向DOM对象。完成模板html渲染到html页面。此过程中进行ajax交互。...存放数据状态,不可以直接修改里面的数据。 - mutations mutations定义方法动态修改Vuex store 状态或数据。...- app.json必须要有这个文件,如果没有这个文件,项目无法运行,因为微信框架把这个作为配置文件入口,整个小程序全局配置

    1.4K20

    微信小程序个人心得「建议收藏」

    先从这三个文件说起. app.js 这个文件是整个小程序入口文件,开发者逻辑代码在这里面实现,同时在这个文件夹里面可以定义全局变量. app.json 这个文件可以对小程序进行全局配置,决定页面文件路径...,开发者可以根据自己需要来进行设置. backgroundColor 这个属性是设置窗口背景色,它需要输入也是十六进制颜色值. backgroundTextStyle 这个属性理解是设置窗口内容样式...设置边框颜色,现在仅支持(black和white) 上面这四个属性就是按照官方给出API来设置就可以,下面说一下list属性.list属性接受是一个数组(Array),在list下面配置每一项都是一个对象...text 设置是按钮上文字 iconPath 是定义icon图片路径,这个属性定义图片大小超过40kb selectedIconPath 定义是当选中按钮之后显示图片,同样图片大小不能超过...相信对css写在单独文件应该不会陌生,这个app.wxss也是类似的,不过他配置是针对全局,也就是说如果你在后面的page没有重新配置他,那么他就会调用这个文件样式设置,但是如果你有个人需求

    1.9K20
    领券