我的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)
var声明后你需要一个分号,顺便说一句,请删除log和()之间的空格
var b = function() {
console.log('outer world');
};
Run Code Online (Sandbox Code Playgroud)