相关疑难解决方法(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中默认函数参数的范围

我正在使用一些 EcmaScript 2015 功能,我必须说该规范相当难以理解。

我完全理解这段代码应该抛出某种错误:

(function(a = b, b = 1) { })();
Run Code Online (Sandbox Code Playgroud)

我知道默认值可以使用外部范围:

(function() {
  let c = 1;
  return (function(a = c) { return a === 1; })();
})();
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么这些例子不好:

(function() {
  let a = 1;
  (function(a = a) { })();
})();

(function() {
  let b = 1;
  (function(a = b, b = 2) { })();
})();
Run Code Online (Sandbox Code Playgroud)

我的 Chrome 59.0.3071.115 抛出 ReferenceError 变量未定义。

Chrome 似乎正在做一些优化,只创建 1 个范围,所有参数都设置为不可访问,并且在分配后将它们一一添加。

这方面的一些证据可能是:

(function(a = () => b, b = 2) { return …
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6

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

标签 统计

ecmascript-6 ×2

javascript ×2

const ×1

hoisting ×1

let ×1