如果将一个函数分配给使用var声明的变量,那么有什么区别?

时间:2018-06-25 11:11:57

标签: javascript function 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();

1 个答案:

答案 0 :(得分:3)

name是JavaScript运行时中的预定义属性,它是setget窗口名称。因此,在使用var时,不能将此保留属性用作函数。

这样做的原因是let允许您声明变量,其作用域仅限于使用它的块,语句或表达式。这与var关键字不同,该关键字全局定义变量,或在整个函数局部定义变量,而与块范围无关。因此,当var试图将name定义为变量时,在这种情况下,globally与现有的name属性冲突,因此在使用{{1 }},但不能使用var

let

因此,要使代码运行,您需要将函数名称更改为其他名称,例如//get name value console.log(name); //set name value name = 'someNewName'; console.log(name);

name1