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

setTimeout没有污染全局命名空间?

答案

在JavaScript中,setTimeout函数用于在指定的时间后执行一个函数。然而,setTimeout在全局作用域中定义,因此它不会污染全局命名空间。

在JavaScript中,命名空间是一个容器,用于存储具有相同名称的变量和函数。全局命名空间包含在程序中的所有作用域中定义的变量和函数,而局部命名空间包含在特定函数或作用域中定义的变量和函数。

setTimeout函数在全局命名空间中定义,这意味着它不会污染任何特定作用域中的命名空间。因此,在函数内部使用setTimeout不会导致意外地访问全局变量或函数。

setTimeout的另一个重要特点是它不创建新的作用域。这意味着在setTimeout函数内部定义的变量和方法不会创建新的作用域,而是可以在setTimeout函数执行时访问和修改。

因此,setTimeout不会污染全局命名空间,并且可以安全地在函数内部使用。

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

相关·内容

【运维自动化-作业平台】如何使用全局变量之命名空间类型?

命名空间类型的全局变量主要适用场景是同一批主机在多个步骤间需要传递独立的变量值,比如内网ip、hostame,每台主机都是不同的变量值。而字符串变量是全局针对所有主机所有步骤都是一样的变量值。...实操演示例:定义一个local_ip的命名空间变量,目标两台机器,然后添加两个执行脚本的步骤,看下变量是如何渲染的。...1、添加命名空间变量local_ip2、添加两个执行脚本步骤(步骤一)(步骤二)3、调试执行结果可以看到两台主机最后渲染的命名空间变量local_ip是不同的值,是各自的内网ip,符合预期。...类似的场景还有很多,掌握命名空间变量的核心实现逻辑,可以满足实际作业步骤设计过程的复杂场景。

8810
  • JS面向对象,设计模式基础

    setTimeout(function(x,y){ console.log(x,y);//1秒后执行回调函数,x='zhufeng' y='peixun'},1000,'zhufeng','peixun...')单例设计模式对象:把描述同一事物的属性和方法放在一起,实现了分组的效果,避免了全局变量污染;每一个对象都是一个单独的实例(个体/堆内存空间),所以我们把这种方案称之为“单例设计模式”// person1...:命名空间 namespacevar person1 = { name:'1', age:18,}// 高级“单例设计模式”// 资讯板块var newsModule = (function...需求:把这个私有的方法setVal,在其它板块中使用 var setVal = function setVal() {}; // 解决1:直接挂载到GO中「弊端:挂载的东西多了,很可能有引发全局变量污染...」 window.setVal = setVal; // 解决2:基于返回值,返回一个对象(命名空间),里面包含需要供外部调用的属性和方法即可 return { setVal

    17700

    模块化-CommonJs、AMD、CMD

    模块化的进化过程 全局function : 将不同的功能封装成不同的全局函数 缺点:虽说可以实现一定的封装效果,但是大量的全局函数,污染全局命名空间,容易引起命名冲突 function module1...() { //... } function module2 () { //... } 命名空间 : 简单对象封装 缺点:减少了全局变量,解决命名冲突,但是外部可以直接修改模块内部的数据 let module...模块化的作用 通过上面的模块拆分,我们发现: 减少了全局变量,有效的避免了命名污染 更好的分离,按需加载 提高了复用性,维护性 但是比较复杂的应用,模块比较多,难免需要引入多个,这样又会出现其他问题...// a.js (定义没有依赖的模块) define(function () { let data = 'aaa' function doSomething () { console.log...// a.js(定义没有依赖的模块) define(function (require, exports, module) { let data = 'aaa' function doSomething

    39830

    【入门级】从一道面试题了解js作用域及作用域链

    ,只不过是徒有其表罢了,这样子的危害就是容易污染全局作用域,而且容易给我们造成一定程度上的误解。...for (var index = 0; index < 10; index++) {     /**/ } console.log(index) // 10 很明显,上面代码中for循环中的index污染全局作用域中的...index,如果我们不小心的话很容易造成意想不到的后果,当然我们也可以尽量小心的去给变量命名,细心的检查代码,或者使用try...catch(感兴趣可以去搜一下,或者看js高级程序设计)去实现块作用域,...进行++的操作其实都是操作的同一个变量——全局变量index,然后我们里面又用的是setTimeout,一个异步函数,虽然我们这里没有设置定时时间,但它还是一个异步函数,需要等到for循环全部结束后才会运行...里面那个未命名函数也有自己的作用域,它接收一个参数i,其实就是在自己的作用域里定义了一个空的变量i,所以打印的时候在当前作用域里可以找到变量i,它就不会再继续往外找了,又因为找到的变量i是空值,所以会是

    41210

    一文讲透JavaScript闭包与立即执行函数表达式(IIFE)

    这样做的好处是可以在函数内部定义变量和函数,而不会对外部的全局作用域造成污染。...2.2、IIFE的特性IIFE的作用包括:避免全局命名冲突:在IIFE内部定义的变量和函数都是在函数作用域内,不会与全局作用域中的变量冲突。...为了解决这个问题,我们可以使用IIFE来创建一个立即执行的函数作用域,并在其中定义循环体内部的变量,从而避免变量共享和污染全局作用域。...总结起来,IIFE在循环中的常见应用是创建函数作用域,避免循环变量的共享和污染全局作用域。它能够有效地解决传统for循环中的闭包问题,特别是在处理异步操作时非常实用。...通过将代码封装在IIFE内部,我们防止污染全局命名空间,并且可以将变量和函数限定在私有作用域中。

    97941

    JS框架设计之命名空间设计一种子模块

    3、众所周知,大多数框架在windows中立足是通过命名空间,基本上我们可以把命名空间看成是框架的名字,当然也有一些框架没有命名空间向Prototype.js,mootools等都有污染的问题,他的意义存在与整个执行环境的每个角落...Test.Array={}; Test.JSONP=new Test.Class(); Test.XHR=new Test.Array(); } 5、众观各大类库的实现,一开始都是以一个全局变量作为命名空间...6、全局变量的污染 全局变量的污染主要分两类 (1)对js原生对象的污染、Prototype,mootools和Base2归为一类,Prototype的原理是对Javascript对象进行扩展,但是他没有考虑到和其他库的兼容性问题... (2)对原生对象几乎没有污染、向jQuery、YUI、EXT这些框架,YUI和EXT就是想上面给出代码那样,一叠罗汉的方式构建的,jQuery则另辟蹊径,他以选择器为向导,所以他的命名空间是一个函数...7、jQuery(命名空间)多库共存问题 因为jQuery最初也是非常弱小的,它想人家使用自己的框架,他也想Prototype那样使用$符作为命名空间

    1K100

    JavaScript闭包和匿名函数的关系详解

    前面讲了一篇在for加setTimeout输出内容,我们用到了一个闭包,但同时也可以说是匿名函数,到底匿名函数和闭包有没有关系呢?...【答案是它们之间没有关系】 匿名函数 匿名函数,顾名思义,就是没有名字的函数,与之对应的就是有名字的函数,也叫具名函数。...闭包 js闭包是指有权访问另一个函数作用域中的变量的函数,个人认为js闭包最大的用处就是防止对全局作用域的污染。...闭包最神奇的地方就是能在一个函数外访问函数中的局部变量,把这些变量用闭包的形式放在函数中便能避免污染。...在这种情况下,闭包机制通常是使特定代码段按预期工作的重要因素,而使用匿名函数而不是命名函数恰好是编码它的便捷方式。

    58630

    TypeScript-命名空间

    命名空间概述命名空间可以看做是一个微型模块当我们想把相关的业务代码写在一起, 又不想污染全局空间的时候, 我们就可以使用 命名空间本质就是定义一个大对象, 把变量/方法/类/接口 ......等,都放里面命名空间和模块区别在程序内部使用的代码, 可以使用命名空间封装和防止全局污染在程序内部外部使用的代码, 可以使用模块封装防止全局污染总结: 由于模块也能实现相同的功能, 所以大部分情况下用模块即可博主假设有这么一个需求...首先来分析一下该功能如果定义在当前 ts 文件当中会造成污染全局的问题,其实可以利用命名空间来解决该污染问题如下:namespace Validation { const lettersRegexp...ts 文件当中的,那么没有定义在同一个文件当中该如何编写呢?...首先需要创建一个 ts 文件来进行存储命名空间编写的功能性代码如下:图片namespace Validation { const lettersRegexp = /^[A-Za-z]+$/;

    17420

    JS温故知新

    垃圾回收器会销毁那些带标记的值并回收它们所占用的内存空间。 谷歌浏览器:“查找引用”,浏览器不定时去查找当前内存的引用,如果没有被占用了,浏览器会回收它;如果被占用,就不能回收。...作用域链 指如果在当前作用域中没有查到值,就会向上级作用域查询,直到全局作用域,这样一个查找过程所形成的链条就被称之为作用域链。 作用域可以堆叠成层次结构,子作用域可以访问父作用域,反之则不行。...作用域具体可细分为四种:全局作用域、模块作用域、函数作用域、块级作用域 全局作用域: 代码在程序的任何地方都能被访问,例如 window 对象。但全局变量会污染全局命名空间,容易引起命名冲突。...块级作用域: 由于 js 变量提升存在变量覆盖、变量污染等设计缺陷,所以 ES6 引入了块级作用域关键字来解决这些问题。典型的案例就是 let 的 for 循环和 var 的 for 循环。...特点: JavaScript对象是通过引用来传递的,我们创建的每个新对象实体中并没有一份属于自己的原型副本。当我们修改原型时,与之相关的对象也会继承这一改变。

    49860

    【随手记】数据类型

    、大小固定,属于被频繁使用数据,所以放入栈中存储; 引用数据类型存储在堆(heap)中的对象,占据空间大、大小不固定。...第二种就是使用 setTimeout 的第三个参数,这个参数会被当成 timer 函数的参数传入。...所有未定义直接赋值的变量自动声明为全局作用域 所有window对象的属性拥有全局作用域 全局作用域有很大的弊端,过多的全局作用域变量会污染全局命名空间,容易引起命名冲突。...作用域链 在当前作用域中查找所需变量,但是该作用域没有这个变量,那这个变量就是自由变量。...全局执行上下文的变量对象(也就是全局对象)始终是作用域链的最后一个对象。 当查找一个变量时,如果当前执行环境中没有找到,可以沿着作用域链向后查找。

    40320

    【C++】命名空间

    多个库将名字放置在全局命名空间中将引发命名空间污染(namespace pollution)。...是有关随机数的一个库函数 int main() { printf("%d\n", rand); return 0; } 如上代码在编译器中运行结果会有重定义错误: 传统上,程序员通过将其定义的全局实体名字设得很长来避免命名空间污染问题...这种是我们一般比较推荐的命名空间使用方式,因为它既不会像单独展开那样导致代码太过繁琐,又不会像命名空间全部展开那样导致大面积的命名污染....这种命名空间的使用方式是在全局范围将整个命名空间引入。...这种方式会将命名空间里的所有成员都暴露在全局中,是我们最不推荐的一种使用方式,因为这样极易造成不经意间的命名空间污染问题.

    9310

    C++ 作用域使用规范建议

    **优点:**命名空间提供了(可嵌套)命名轴线(name axis,注:将命名分割在丌同命名空间内),当然,类也提供了(可嵌套)的命名轴线(注:将命名分割在丌同类的作用域内)。...(3)尽量不要使用全局函数 应该使用命名空间中的非成员函数和类的静态成员函数。这样做的原因是在某些情况下,非成员函数和静态成员函数是非常有用的,将非成员函数置于命名空间中可避免对全尿作用域的污染。...内建类型和由内建类型构成的没有构造函数的结构体可以使用,如果一定要使用class类型的全局变量,请使用单件模式(singleton pattern)。...5.小结 (1)cpp源文件中的匿名名字空间可避免命名冲突、限定作用域,避免直接使用using指示符污染命名空间; (2)嵌套类符合局部使用原则,只是不能在其他头文件中前置定义,尽量不要设为public...; (3)尽量不用全局函数和全局变量,考虑作用域和命名空间限制,尽量单独形成编译单元; (4)多线程中的全局变量(含静态成员变量)不要使用class类型(含STL容器),避免不明确行为导致的bugs

    1.1K20

    面向对象系列讲解—认识对象

    HTML5学堂:面向对象、原型、继承应该说是属于JavaScript最底层的知识和概念,对于这些知识,在我们没有触碰的时候的确觉得是比较困难的,包括在学习的过程中,也觉得摸不到头脑,但是当走过之后,发现也没有那么难...对象命名空间 在讲解面向对象之前,先来讲解一下对象命名空间。我们常说,常见避免js命名冲突的方法有三种,分别是匿名函数、协同命名以及对象命名空间。那么这个对象命名空间到底是个什么玩意儿呢?...接下来我们以一个小例子为例,看看如何用对象命名空间的方式进行代码的书写,同时也再理解一下所谓的“防止全局作用域被污染”。...那么对象命名空间就是解决这个冲突的好办法。我们使用一个对象进行这一系列属性和方法的存储,让它们都属于某一个对象,来看代码: <!...从上面的效果不难看出,如此操作之后,附属于window这个对象下的属性和方法的数量大大的减少了,那也就不难理解所谓的“尽可能的防止全局作用域被污染,减少命名冲突”这句话了。

    68240

    细说JavaScript闭包

    JavaScript 闭包难点剖析一、作用域基本介绍ES6之前只有全局作用域与函数作用域两种,ES6出现之后,新增了块级作用域1.全局作用域在JavaScript中,全局变量是挂载在window对象下的变量...,所以在网页中的任何位置你都可以使用并且访问到这个全局变量当我们定义很多全局变量的时候,会容易引起变量命名的冲突,所以在定义变量的时候应该注意作用域的问题var globalName = 'global'function...(window)和它自己本身;fun2 函数的作用域指向全局作用域(window)、fun1 和它本身;而作用域是从最底层向上找,直到找到全局作用域 window 为止,如果全局没有的话就会报错function...这不仅可以避免了外界访问此 IIFE 中的变量,而且又不会污染全局作用域,我们经常能在高级的 JavaScript 编程中看见此类函数。三、如何解决循环输出问题?...往上找它的父级作用域就是 window,变量 i 为 window 上的全局变量,开始执行 setTimeout 之前变量 i 已经是 6 了,因此最后输出的连续都是 6参考视频讲解:进入学习1.利用

    21140

    细说JavaScript闭包

    JavaScript 闭包难点剖析一、作用域基本介绍ES6之前只有全局作用域与函数作用域两种,ES6出现之后,新增了块级作用域1.全局作用域在JavaScript中,全局变量是挂载在window对象下的变量...,所以在网页中的任何位置你都可以使用并且访问到这个全局变量当我们定义很多全局变量的时候,会容易引起变量命名的冲突,所以在定义变量的时候应该注意作用域的问题var globalName = 'global'function...(window)和它自己本身;fun2 函数的作用域指向全局作用域(window)、fun1 和它本身;而作用域是从最底层向上找,直到找到全局作用域 window 为止,如果全局没有的话就会报错function...这不仅可以避免了外界访问此 IIFE 中的变量,而且又不会污染全局作用域,我们经常能在高级的 JavaScript 编程中看见此类函数。三、如何解决循环输出问题?...往上找它的父级作用域就是 window,变量 i 为 window 上的全局变量,开始执行 setTimeout 之前变量 i 已经是 6 了,因此最后输出的连续都是 61.利用 IIFE利用 IIFE

    21810

    说说JavaScript闭包

    JavaScript 闭包难点剖析一、作用域基本介绍ES6之前只有全局作用域与函数作用域两种,ES6出现之后,新增了块级作用域1.全局作用域在JavaScript中,全局变量是挂载在window对象下的变量...,所以在网页中的任何位置你都可以使用并且访问到这个全局变量当我们定义很多全局变量的时候,会容易引起变量命名的冲突,所以在定义变量的时候应该注意作用域的问题var globalName = 'global'function...(window)和它自己本身;fun2 函数的作用域指向全局作用域(window)、fun1 和它本身;而作用域是从最底层向上找,直到找到全局作用域 window 为止,如果全局没有的话就会报错function...这不仅可以避免了外界访问此 IIFE 中的变量,而且又不会污染全局作用域,我们经常能在高级的 JavaScript 编程中看见此类函数。参考 前端面试题详细解答三、如何解决循环输出问题?...往上找它的父级作用域就是 window,变量 i 为 window 上的全局变量,开始执行 setTimeout 之前变量 i 已经是 6 了,因此最后输出的连续都是 61.利用 IIFE利用 IIFE

    21640
    领券