这个 JS 错是为什么?

2019 年 4 月 1 日
 liujianwei
var f = function() { console.log('I am outside!'); }

(function s() {
    var f = function() { console.log('I am inside!'); }
    f();
}());

f();

"C:\Program Files\JetBrains\IntelliJ IDEA 2018.1.4\bin\runnerw.exe" C:\nodejs\node.exe C:\path\to\projects\test\src\test\test.js I am inside! C:\path\to\projects\test\src\test\test.js:8 f(); I am outside! ^

TypeError: f is not a function at Object.<anonymous> (C:\path\to\projects\test\src\test\test.js:8:1) at Module._compile (internal/modules/cjs/loader.js:689:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10) at Module.load (internal/modules/cjs/loader.js:599:32) at tryModuleLoad (internal/modules/cjs/loader.js:538:12) at Function.Module._load (internal/modules/cjs/loader.js:530:3) at Function.Module.runMain (internal/modules/cjs/loader.js:742:12) at startup (internal/bootstrap/node.js:283:19) at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)</anonymous>

Process finished with exit code 1

3662 次点击
所在节点    程序员
13 条回复
ccccccc
2019 年 4 月 1 日
注意分号
yuanfnadi
2019 年 4 月 1 日
let f = function() {
console.log('I am outside!');
};
(function s() {
let f = function() {
console.log('I am inside!');
};
f();
})();

f();


请格式化代码。
azh7138m
2019 年 4 月 1 日
no1xsyzy
2019 年 4 月 1 日
@ccccccc 可以,眼尖
azh7138m
2019 年 4 月 1 日
@no1xsyzy 这不是眼尖吧,这是个 ASI 的问题了........
liujianwei
2019 年 4 月 1 日
明白了!

```
var f = function() { console.log('I am outside!') }

;(function s() {
var f = function() { console.log('I am inside!') }
f()
}())

f()
```

对于不喜欢加分号的我,只要对行首字符进行判断,如果是 `[ ( + - / `五个符号之一,就在行首加分号。
crazyrock
2019 年 4 月 1 日
@liujianwei 你这分号加开头是啥意思?
liujianwei
2019 年 4 月 1 日
@crazyrock 就相当于加在了上一行的行位,对于解释器来说是一样的,但这样更易于,对不加分号的少数几个例外情况的规则的描述。人读着不好看的话,可以格式化一下即可。
no1xsyzy
2019 年 4 月 1 日
@azh7138m 常见问题吗?我就是不写分号也难得碰到。
让我好好想想我是怎么个写法……
no1xsyzy
2019 年 4 月 1 日
@crazyrock JavaScript Standard Style, available at: <https://standardjs.com/rules.html#semicolons>
HustLiu
2019 年 4 月 1 日
这就是为什么立即执行函数括号前一般会加个分号的标准例子……
ochatokori
2019 年 4 月 1 日
最必要加分号的地方你不加分号,还以为你是来考大家的。。。
crazyrock
2019 年 4 月 1 日
@no1xsyzy 多谢,一直都不知道呢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/550823

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX