相关疑难解决方法(0)

是否在ES6中使用let或const声明变量?

我已经玩ES6一段时间了,我注意到虽然声明的变量var按预期提升了......

console.log(typeof name); // undefined
var name = "John";
Run Code Online (Sandbox Code Playgroud)

... 用吊装声明letconst似乎有一些问题的变量:

console.log(typeof name); // ReferenceError
let name = "John";
Run Code Online (Sandbox Code Playgroud)

console.log(typeof name); // ReferenceError
const name = "John";
Run Code Online (Sandbox Code Playgroud)

这是否意味着变量声明let或未声明const?这是怎么回事?这个问题letconst这个问题有什么区别吗?

javascript const let hoisting ecmascript-6

240
推荐指数
5
解决办法
5万
查看次数

Javascript 中已声明但未初始化的变量会发生什么情况?它有价值吗?

在Javascript中,我可以做

> var foo;
< undefined
> foo;
< undefined
Run Code Online (Sandbox Code Playgroud)

表明在 Javascript 中,声明的未初始化变量始终是undefined。但他们是吗?或者它们可以像 C 中那样采用随机垃圾值吗?

MDN 的 var 文档没有帮助。

javascript

6
推荐指数
1
解决办法
6929
查看次数

当为它们分配抛出错误的函数的返回值时,导致"var"和"let"之间的不同行为的原因

请在下图中找到代码.1.将函数的返回值(实际上抛出一个错误)分配给使用关键字"let"声明的变量'withLet'.2.调用'withLet',发生错误:'withLet未定义'.3.尝试使用'let'断言'withLet',错误显示已经声明'withLet'.

但是'var'不存在悖论(请参见下图).

我很好奇是什么导致了这两种情况之间的不同行为.它是非常有线的,"未定义","已经声明"描述了一个相同的变量.

let withLet = (function() {throw 'error!'})()
var withVar = (function() {throw 'error!'})()
//VM2470:1 Uncaught error!
//(anonymous) @ VM2470:1
//(anonymous) @ VM2470:1
withLet
//VM2484:1 Uncaught ReferenceError: withLet is not defined at 
//<anonymous>:1:1
//(anonymous) @ VM2484:1
withVar
//undefined
let withLet = 'sth'
//VM2520:1 Uncaught SyntaxError: Identifier 'withLet' has already been 
//declared
//at <anonymous>:1:1
//(anonymous) @ VM2520:1
withVar = 'sth'
//"sth"
Run Code Online (Sandbox Code Playgroud)

截图:

javascript var let throw

3
推荐指数
1
解决办法
117
查看次数

为什么不能在用 let 和 const 声明变量之前完成赋值?

我在多个网站(如 w3schools)上读到过,提升是“将所有声明移动到当前范围顶部的行为”。

对于letand const,变量被提升但没有初始化。

我理解为什么以下代码不起作用,因为name它对我们没有访问价值。

console.log(name);
let name = "hi";
Run Code Online (Sandbox Code Playgroud)

但是为什么我们不能name在实际声明之前为其赋值,即使name已经声明(提升)?

name = "hi";
let name;
console.log(name);
Run Code Online (Sandbox Code Playgroud)

上面的代码是不是和下面的一样,

let name;
name = "hi";
console.log(name);
Run Code Online (Sandbox Code Playgroud)

javascript hoisting

3
推荐指数
1
解决办法
78
查看次数

用let未正确初始化的变量出错

我对JS中的Set类型感到困惑。如果使用未正确初始化的Set创建变量,则不能再使用它(作为Set或原始类型)。在控制台中尝试:

let someSet = new Set(4);
/* Uncaught TypeError: number 4 is not iterable (cannot read property Symbol(Symbol.iterator))
    at new Set (<anonymous>)*/

someSet
// Uncaught ReferenceError: someSet is not defined 

let someSet = new Set([4])
// Uncaught SyntaxError: Identifier 'someSet' has already been declared
someSet
// Uncaught ReferenceError: someSet is not defined

let someSet = 'ho-ho-ho'
// Uncaught SyntaxError: Identifier 'someSet' has already been declared

someSet = 'ho-ho-ho'
// Uncaught ReferenceError: someSet is not defined

Run Code Online (Sandbox Code Playgroud)

你能解释一下为什么吗?见屏幕:

在此处输入图片说明

javascript ecmascript-6

2
推荐指数
1
解决办法
51
查看次数

标签 统计

javascript ×5

ecmascript-6 ×2

hoisting ×2

let ×2

const ×1

throw ×1

var ×1