javascript - IF 一个函数被赋值给一个使用 var 声明的变量和 let 有什么区别?
问题描述
当我运行下面的代码时,它给了我错误
var name = function print(){
console.log("welcome ......");
};
name();
js.js:5 Uncaught TypeError: name is not a function
at js.js:5
但是当我将 var 关键字更改为 let 时,它运行良好 谁能解释一下
let name = function print(){
console.log("welcome ......");
};
name();
解决方案
name
是 JavaScript 运行时中的预定义属性set
或get
窗口的名称。因此,在使用var
.
这样做的原因是let
允许您将范围限制在使用它的块、语句或表达式中声明变量。这与var
关键字不同,它在全局范围内定义变量,或者在本地定义整个函数,而不管块范围如何。因此,当var
尝试将其定义name
为变量时,globally
在这种情况下,它与现有name
属性冲突,因此您在使用时会收到该错误,var
但与let
.
//get name value
console.log(name);
//set name value
name = 'someNewName';
console.log(name);
因此,要使您的代码运行,您需要将函数名称更改为其他名称,例如name1
:
var name1 = function print(){
console.log("welcome ......");
}
name1();
推荐阅读
- sqlite - Microsoft.WindowsAzure.MobileServices.MobileServiceClient.PullAsync 的“安全句柄已关闭”错误
- apache-spark - Apache Spark:如何“缓存”数据集,使其不会重新计算以进行下一次计算
- linux-kernel - arch/arm64/Makefile:27: ld 不支持 --fix-cortex-a53-843419;内核可能容易出现错误
- python-3.x - ValueError:RGBA 参数无效。为什么会这样?我该如何解决?
- php - 如何在不影响表格行样式的情况下将表格行显示为表单输入
- python - 将孩子定位在窗格窗口内
- xml - 在 XSD 的扩展中添加对元素的限制
- typescript - Typescript React Native navigation.push 输入错误
- azure - 使用 C# 从 Azure 存储中删除 Blob
- r - 更新值和融化列的功能