gpt4 book ai didi

关于 var 声明的 JavaScript 行为解释

转载 作者:行者123 更新时间:2023-11-28 21:05:36 29 4
gpt4 key购买 nike

我有以下代码:

"use strict";

function isDefined(variable)
{
return (typeof (window[variable]) === "undefined") ? false : true;
}

try
{
isDefined(isTrue);
}
catch (ex)
{
var isTrue = false;
}

isTrue = true;

有人可以向我解释一下,为什么当我删除关键字“var”时,我会抛出异常,但当它存在时,它会将其视为未定义?

最佳答案

在严格模式下运行时,不允许访问先前未声明的变量。因此,必须先声明isTrue,然后才能访问它。因此,如果您删除它前面的 var 并且它没有在其他地方声明,那么这将是一个错误。

引自MDN page on strict mode :

First, strict mode makes it impossible to accidentally create global variables. In normal JavaScript mistyping a variable in an assignment creates a new property on the global object and continues to "work" (although future failure is possible: likely, in modern JavaScript). Assignments which would accidentally create global variables instead throw in strict mode:

你的问题中关于未定义的部分有点复杂。由于变量提升,其中变量声明被编译器提升到其声明范围的顶部,因此使用 var 语句的代码等效于:

var isTrue;
try
{
isDefined(isTrue);
}
catch (ex)
{
isTrue = false;
}

isTrue = true;

因此,当您调用 isDefined(isTrue) 时,isTrue 的值为 undefined。它已被声明,但尚未初始化,因此它的值为未定义。当您没有 var 语句时,在严格模式下对 isTrue 的任何引用都是错误,因为它尚未声明。

如果您只想知道变量是否有值,您可以简单地执行以下操作:

if (typeof isTrue != "undefined") {
// whatever code here when it is defined
}

或者,如果您只是想确保它在尚未初始化的情况下具有值,您可以这样做:

if (typeof isTrue == "undefined") {
var isTrue = false;
}

关于关于 var 声明的 JavaScript 行为解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9963374/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com