IF 一个函数被赋值给一个使用 var 声明的变量和 let 有啥区别?
Posted
技术标签:
【中文标题】IF 一个函数被赋值给一个使用 var 声明的变量和 let 有啥区别?【英文标题】:IF a function is assigned to a variable declared using var and let what is the difference?IF 一个函数被赋值给一个使用 var 声明的变量和 let 有什么区别? 【发布时间】:2018-12-03 22:47:05 【问题描述】:当我运行下面的代码时,它给了我错误
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】: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();
【讨论】:
@JamilAmini 很高兴为您提供帮助 @giorgim 在回答中添加了更多细节 @AnkitAgarwal 是有道理的,但是如果我直接在脚本中使用let
声明变量,例如不把它封装在函数中,那它不也是全局的吗?
@giorgim 它的范围仅限于块,这意味着仅适用于该特定的 JS 文件,而不是整个 JavaScript 环境
@AnkitAgarwal Ah 和var
意味着它不仅是那个文件(如果它在函数或块之外),而是整个JS环境,好的,明白了。以上是关于IF 一个函数被赋值给一个使用 var 声明的变量和 let 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
javascript中var let const三种变量声明方式