JavaScript代码块中的"未捕获的TypeError:undefined不是函数"

mit*_*esh 23 javascript

我的html页面中有一个如下所示的JavaScript代码块.当我通过加载页面来运行它.我的浏览器控制台上的输出低于输出.

outer world 
Uncaught TypeError: undefined is not a function
Run Code Online (Sandbox Code Playgroud)

正如您在代码片段中看到的那样,我没有执行b代码中任何位置命名的函数.但是在运行代码时,该函数的输出与undefined is not a function error我无法在代码块中的任何位置找到.

要向此方案添加更多内容,当我删除代码中的任何一个部分时,没有日志.那是.如果我从代码中删除b的初始化,则没有错误和输出.此外,如果我删除自执行功能块,则没有日志或错误.确实b的初始化行缺少分号.但诱惑它提供这样的输出会让我感到困惑.你能帮助我找出这种行为的推理吗?

你能帮我理解为什么会这样吗?

var b = function() {
  console.log('outer world');
}

(function() { 

})();
Run Code Online (Sandbox Code Playgroud)

kor*_*eff 32

;声明后错过了一个b.以下代码与您拥有的代码相同.

var b = function() {
   console.log ('outer world');
}(function() {})();
Run Code Online (Sandbox Code Playgroud)

没有;b变为自动执行并且将空函数作为参数.之后它再次自我执行; 但是,因为b不返回函数,所以会出现异常.

我建议不要跳过,;直到你成为js忍者:).保持b内部以避免全球范围的污染.

(function () {
    "use strict";

    var b = function () {
        console.log("hi");
    };
    // other code
}());
Run Code Online (Sandbox Code Playgroud)

分号自动插入讨论

如果您不想使用分号,请在自运行功能之前添加运算符

var b = function () { console.log('outer world') }
;(function() { /* ... */ }())
Run Code Online (Sandbox Code Playgroud)

ES6更新:

(() => {
  const b = () => console.log('hi')
  // ...
})()
Run Code Online (Sandbox Code Playgroud)

  • 最后,一个例子,其中Javascript不会自动插入分号,直观地添加它! (6认同)
  • 任何以`(`或```需要`;`开头的东西. (5认同)

Ric*_*aaf 5

var声明后你需要一个分号,顺便说一句,请删除log和()之间的空格

var b = function() {
       console.log('outer world');
};
Run Code Online (Sandbox Code Playgroud)