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
insideencloseedgreeting()
仅存在于定义该函数的大括号内。这是因为您尚未声明它。正如前面的帖子所说,它没有被宣布<代码>名称
必须已在代码中声明。其他事情则不然。因此,您必须首先实际声明它。然后它会被提醒。是在包含问候语()
定义的范围内定义的其他单词
?名称
被定义为窗口
的一个属性,因此它将存在而无需您定义它,这与其他单词
名称是“类型保护”不同属性,它始终是一个字符串,可在全局范围内访问。您尚未定义表达式中使用的其他变量,这就是它们触发错误的原因。根据@NickParsons注释定义了名称