Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么警报框不运行?_Javascript - Fatal编程技术网

Javascript 为什么警报框不运行?

Javascript 为什么警报框不运行?,javascript,Javascript,下面是我正在尝试运行的代码 const greeting = () => { alert(`Hello ${name}`) } greeting(); 它运行时没有任何错误 但是当函数中的变量名不是单词name const greeting = () => { alert(`Hello ${someOtherWord}`) } greeting(); 这会抛出错误吗?为什么会发生这种情况 以下是错误: 引用错误:未定义其他单词 您能告诉我为什么会发生这种情况吗

下面是我正在尝试运行的代码

const greeting = () => {
    alert(`Hello ${name}`)
}

greeting();
它运行时没有任何错误

但是当函数中的变量名不是单词
name

const greeting = () => {
    alert(`Hello ${someOtherWord}`)
}

greeting();
这会抛出错误吗?为什么会发生这种情况

以下是错误

引用错误:未定义其他单词


您能告诉我为什么会发生这种情况吗?

您应该首先声明另一个变量,它也应该在作用域中。比如:

let someOtherWord = "hello World";
const greeting = () => {
    alert(`Hello ${someOtherWord}`)
}

greeting();

因此,
name
是浏览器窗口中的一个特殊单词,在所有脚本中都是通用的。但是,如果您键入
someOtherWord
,则会将其作为变量,并导致错误,因为您尚未声明该变量

因此,如果您只想提醒任何单词,请删除$和{},如下所示:

const问候语=()=>{
警报(`Hello someOtherWord`)
}

问候语()正如一些评论所提到的,当此代码在浏览器环境中运行时,变量
name
将始终存在。 原因是,在浏览器中,您的全局范围是
窗口
对象。这意味着
窗口
对象上的任何属性都可以通过其属性名直接调用,而无需显式调用
窗口.somePropertyName
。其中一个默认的
window
对象属性是
window.name
,这是您在警报中调用
name
时实际引用的属性,因此您不会抛出错误,因为它总是定义的

相反,在本例中,
someOtherWord
不存在,至少在您在此共享的代码中不存在。要使变量名
someOtherWord
greeting
中可访问,需要在函数的范围内或函数的范围内(在本例中为全局范围)声明和分配变量名

两个工作示例:

const encloseedgreeting=()=>{
const someOtherWord='这是一个警报!';
警报(`Hello${someOtherWord}`);
}
const someOtherWord='这是一个警报!';
const globalGreeting=()=>{
const someOtherWord='这是一个警报!';
警报(`Hello${someOtherWord}`);
}
封边缠绕();
全球问候语();

您可以将整个代码块复制并粘贴到您的运行时环境中,它将在没有任何未定义或命名空间冲突错误的情况下运行,因为
someOtherWord
inside
encloseedgreeting()
仅存在于定义该函数的大括号内。

这是因为您尚未声明它。正如前面的帖子所说,它没有被宣布<代码>名称
必须已在代码中声明。其他事情则不然。因此,您必须首先实际声明它。然后它会被提醒。

是在包含
问候语()
定义的范围内定义的
其他单词
名称
被定义为
窗口
的一个属性,因此它将存在而无需您定义它,这与
其他单词
名称是“类型保护”不同属性,它始终是一个字符串,可在全局范围内访问。您尚未定义表达式中使用的其他变量,这就是它们触发错误的原因。根据@NickParsons注释定义了名称