【问题标题】:JavaScript blockscope with let带有 let 的 JavaScript 块作用域
【发布时间】:2015-06-25 13:28:47
【问题描述】:

我从下面给出的MDN website 修改了原始脚本。

  1. var 的类型是什么?是不是在给变量赋值后才赋值的类型。

  2. var b = 1 是否会覆盖前面的语句 var b = 10?还是只是变量 b?

  3. 是否让非标准语言功能?我读到 here 它在 ECMAScript 6 中受支持。

var a = 5;
var b = 10;

if (a === 5) {
  let a = 4; // The scope is inside the if-block
  var b = 1; // The scope is inside the function

  alert(a);  // 4
  alert(b);  // 1
} 

alert(a); // 5
alert(b); // 1

【问题讨论】:

  • ECMAScript 6 是一个即将推出的标准,它还没有得到广泛的支持,而且还不完整,所以它仍有可能发生变化。
  • 变量没有类型。价值观。

标签: javascript var let


【解决方案1】:

var 的类型是什么?

var 没有类型。这是一个keyword 用于声明变量。

是不是只有在给变量赋值后才分配类型?

当你声明一个变量但不给它赋值时,它的值将是undefined,其类型是Undefined

var b = 1 是否会覆盖前面的语句 var b = 10?还是只是变量 b?

变量语句被提升到顶部。这意味着它们是等价的:

// ...
var b = 10;
if(cond) var b = 1;
var b;
// ...
b = 10;
if(cond) b = 1;

因此,由于 b 已经声明,var b = 1 将等同于 b = 1

let 是非标准语言功能吗?我在这里读到它在 ECMAScript 6 中受支持。

let 是在 JavaScript 1.7 中引入的,当时不是任何 ECMA-262 标准的一部分。

现在 ECMAScript 6 已经对其进行了标准化(与 JS 1.7 有点不同)。但是请注意,ECMAScript 6 仍然是一个草案。

【讨论】:

【解决方案2】:
  1. 是的,var x 没有类型。 var x = 1 的类型为 number
  2. var b 不会覆盖其他语句,它只是为给定范围设置一个新变量。这意味着在该范围内,您将获得新分配的 b 值。
  3. let 是 es6。所以是和否,取决于您的代码在哪里运行。

【讨论】:

    猜你喜欢
    • 2018-08-11
    • 2020-11-24
    • 2015-06-27
    • 1970-01-01
    • 2019-04-26
    相关资源
    最近更新 更多