首页 > 解决方案 > 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();

标签: javascriptfunctionvarlet

解决方案


name是 JavaScript 运行时中的预定义属性setget窗口的名称。因此,在使用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();


推荐阅读