相关疑难解决方法(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万
查看次数

未捕获的TypeError :(中间值)(...)不是函数

当我在一个闭包中将js逻辑写为单个js文件时,一切正常,如下:

(function(win){
   //main logic here
   win.expose1 = ....
   win.expose2 = ....
})(window)
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在同一个js文件中的闭包之前插入一个日志备用函数时,

 window.Glog = function(msg){
     console.log(msg)
 }
 // this was added before the main closure.

 (function(win){
   //the former closure that contains the main javascript logic;
 })(window)
Run Code Online (Sandbox Code Playgroud)

它抱怨有一个TypeError:

Uncaught TypeError: (intermediate value)(...) is not a function
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

javascript typeerror

91
推荐指数
7
解决办法
12万
查看次数

为什么我的函数以错误的顺序执行?

我想知道为什么我的程序输出I4 output\ I3 outputxef\xbc\x9f

\n

\r\n
\r\n
var a = 4;\nvar i = 0;\nvar i3 = function() {\n  console.log("I3 output")\n  return i = i + 3\n}\nvar i4 = function() {\n  console.log("I4 output")\n  return i = 4\n}\n\n(a > 3) && i3() || (a < 5) && i4();\nconsole.log(i)
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n

我想要I3 output那时I4 output。为什么这不起作用?

\n

javascript

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

为什么两个函数调用的括号之间的换行不被视为js中的两个语句?

为什么在js上做出这种糟糕的设计?是否有任何特殊原因设计这样的自动分号插入?

这是我的代码,它在chrome中的js中不起作用:

(function(){console.log("abc");})()

(function(){console.log("123");})();
Run Code Online (Sandbox Code Playgroud)

这是错误:

Uncaught TypeError: (intermediate value)(...) is not a function
Run Code Online (Sandbox Code Playgroud)

我知道这段代码的正确版本是:

(function(){console.log("abc");})();

(function(){console.log("123");})();
Run Code Online (Sandbox Code Playgroud)

我只是想知道为什么js语法设计得如此愚蠢.历史原因?

我也添加这个问题作为警告,每个人都尝试使用javascript的自动分号插入,请只需添加;它需要的任何地方,javascript的自动分号插入是垃圾.它没有像你期望的那样工作.

现有的答案对我来说太复杂了,所以我问一个新答案:

/sf/answers/199240891/

另一个看起来不错但不是工作案例2:

x=1

(function(){console.log("123");})()
Run Code Online (Sandbox Code Playgroud)

javascript syntax

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

如何解构这个数组

我如何解构widthheight如果它们之前已经声明过?

function test() {
  let height
  let width

  const viewBox = '0 0 24 24'
  const sizeArr = viewBox.split(' ')

  // ESLint is telling me to destructure these and I don't know how
  width = sizeArr[2]
  height = sizeArr[3]
}
Run Code Online (Sandbox Code Playgroud)

javascript arrays ecmascript-6 destructure

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

立即调用函数表达式抛出"对象不是函数"

我在Javascript文件中定义了各种模块:

var module = {/* ... */}

(function(){
    console.log('Invoked');
})()
Run Code Online (Sandbox Code Playgroud)

然而,IIFE抛出一个错误:

> TypeError:object不是函数

我试过复制并粘贴IIFE代码,没有问题.

javascript iife

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

eval不是一个功能

它可能会引起人们的兴趣并节省几个小时,一个讨厌的捆绑问题,eval来自一个文件,而函数来自第二个文件.

eval('console.log(0)')
(function(x){console.log(x)})(1)
Run Code Online (Sandbox Code Playgroud)

将导致:未捕获TypeError:eval(...)不是函数

这是修复

eval('console.log(0)');
(function(x){console.log(x)})(1)
Run Code Online (Sandbox Code Playgroud)

缺少分号,我几次读过JS中的分号,大部分时间都是.

任何评论为什么eval在这种情况下不是一个函数?

javascript syntax eval

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