IIFE 奇怪的行为与使用 let 或 var 声明的变量相关联

问题描述 投票:0回答:1

我尝试理解为什么当用 var 声明权限时变量“Permissions”将是“function”类型,而用 let 声明时变量“Permissions”将是“object”类型(这是例外行为)

使用 'var' - 权限是 'function' 类型

var Permissions;

(function (Permissions) {
    Permissions[Permissions["ADMIN"] = 0] = "ADMIN";
    Permissions[Permissions["READ_ONLY"] = 1] = "READ_ONLY";
})(Permissions || (Permissions = {}));

使用 'let' - 权限是 'object' 类型

let Permissions;

(function (Permissions) {
    Permissions[Permissions["ADMIN"] = 0] = "ADMIN";
    Permissions[Permissions["READ_ONLY"] = 1] = "READ_ONLY";
})(Permissions || (Permissions = {}));

我将这两种情况都排除为“对象”。为什么使用“var”权限是“function”类型?

javascript function var let iife
1个回答
0
投票

在全局范围内使用

var
声明变量会使其成为
window
的属性。 由于您尚未初始化它,因此它实际上指向现有的
window.Permissions
属性。
let
工作方式不同,并在当前作用域中声明一个单独的变量:

console.log(Permissions);

© www.soinside.com 2019 - 2024. All rights reserved.