栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何取消设置JavaScript变量?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何取消设置JavaScript变量?

delete
操作者,将删除该对象的属性。它不能删除变量。因此,问题的答案取决于如何定义全局变量或属性。

(1)如果使用创建

var
,则无法删除。

例如:

var g_a = 1; //create with var, g_a is a variable delete g_a; //return falseconsole.log(g_a); //g_a is still 1

(2)如果创建时不带

var
,则可以将其删除。

g_b = 1; //create without var, g_b is a property delete g_b; //return trueconsole.log(g_b); //error, g_b is not defined

技术说明

1.使用
var

在这种情况下,引用

g_a
是在ECMAscript规范称为“VariableEnvironment”的情况下创建的,该引用附加到当前作用域-在函数
var
内部使用的情况下,这可能是函数执行上下文(尽管可能会有些复杂)当您考虑
let
)或使用“全局”代码时,VariableEnvironment将附加到全局对象(通常是
window
)。

VariableEnvironment 中的引用通常不可删除-ECMAscript10.5]中详细介绍的过程对此进行了详细说明,但足以说明,除非您的代码在

eval
上下文中执行(大多数基于浏览器的开发控制台都在使用),否则使用声明的变量
var
不能被删除。

2.不使用
var

当尝试在不使用

var
关键字的情况下为名称分配值时,Javascript尝试在ECMAscript规范称为“LexicalEnvironment ”的位置查找命名的引用,主要区别在于_LexicalEvironment_ 是嵌套的-即 LexicalEnvironment_具有父级(
ECMAscript规范称为“外部环境引用”),并且当Javscript无法在 _LexicalEenvironment中
找到引用时,它将在父_LexicalEnvironment中_ 查找(如10.3.1和10.2.2.1中所述)。顶级 LexicalEnvironment 是“全球环境”,并且绑定到全局对象,因为它的引用是全局对象的属性。因此,如果您尝试访问未使用
var
当前范围或任何外部范围中的关键字声明的名称,则Javascript最终将获取属性该的
window
对象充当参考。正如我们之前了解到,在对象的属性可以被删除。

笔记

  1. 重要的是要记住,
    var
    声明是“悬挂的”-即始终认为它们发生在它们所作用域的开头-尽管不是
    var
    语句中可能完成的值初始化-保留在声明所在的位置。因此,在下面的代码中,
    a
    是来自 VariableEnvironment 的引用,而不是该
    window
    属性的引用,并且其值将
    10
    位于代码的末尾:

function test() { a = 5; var a = 10; }

  1. 上面的讨论是在未启用“严格模式”的情况下。使用“严格模式”时,查找规则略有不同,如果没有“严格模式”,则解析为窗口属性的词法引用将在“严格模式”下引发“未声明变量”错误。我不太了解在哪里指定它,但是它在浏览器中表现如何。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/411316.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号