相关疑难解决方法(0)

JavaScript的自动分号插入(ASI)有哪些规则?

好吧,首先我应该问一下这是否依赖于浏览器.

我已经读过,如果找到一个无效的令牌,但代码段在该无效令牌之前有效,则在令牌之前插入分号(如果前面有换行符).

但是,由分号插入引起的错误引用的常见示例是:

return
  _a+b;
Run Code Online (Sandbox Code Playgroud)

..它似乎不遵循这个规则,因为_a将是一个有效的标记.

另一方面,分解调用链按预期工作:

$('#myButton')
  .click(function(){alert("Hello!")});
Run Code Online (Sandbox Code Playgroud)

有没有人对规则有更深入的描述?

javascript automatic-semicolon-insertion

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

es6阵列解构怪异

谁能解释一下,为什么ES6阵列解构会发生以下情况?

let a, b, c
[a, b] = ['A', 'B']
[b, c] = ['BB', 'C']
console.log(`a=${a} b=${b} c=${c}`)

// expected: a=A b=BB c=C
// actual:   a=BB b=C c=undefined
Run Code Online (Sandbox Code Playgroud)

http://codepen.io/ronkot/pen/WxRqXg?editors=0011

javascript ecmascript-6

8
推荐指数
2
解决办法
275
查看次数

解构赋值和变量交换

Javascript允许交换变量:

var x = 1
var y = 2

[x, y] = [y, x] // y = 1 , x = 2
Run Code Online (Sandbox Code Playgroud)

和结构化的任务:

var a, b
[a, b] = [1, 2]

log(a) // 1
log(b) // 2
Run Code Online (Sandbox Code Playgroud)

当使用变量交换代替析构化赋值时,尝试交换变量会分解:

var a, b
[a, b] = [1, 2] // a = 1, b = 2

[a, b] = [b, a] // TypeError: Cannot set property '2' of undefined
Run Code Online (Sandbox Code Playgroud)

这是为什么?

javascript destructuring variable-assignment node.js

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

当我简单地改变两个表达式的顺序时,为什么这个for循环不起作用

对于以下fibonacci函数,它按预期工作:

function fibonacci(n) {
  var nums = []
  var a = b = 1
  for (let i = 0; i < n; i++) {
    [a, b] = [b, a + b]
    nums.push(a)
  }
  return nums
}

console.log(fibonacci(5));
// outputs: [1,2,3,5,8]
Run Code Online (Sandbox Code Playgroud)

但在我更改了两个语句的顺序后,它不起作用:

function fibonacci(n) {
  var nums = []
  var a = b = 1
  for (let i = 0; i < n; i++) {
    nums.push(a)
    [a, b] = [b, a + b]
  }
  return nums
}

console.log(fibonacci(5));
// outputs: [1,1,1,1,1] …
Run Code Online (Sandbox Code Playgroud)

javascript syntax

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