这篇文章上次修改于 320 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

这两天有遇到一段很有意思的代码,我觉得那它作为 JavaScript 这个专题的开端,应该会很不错。这段代码给我带来了一种新鲜但又有种“哦原来是这样的”熟悉感,我想把它送给你们,当做重新于 JavaScript 相遇的礼物...

见面礼

function aFun() {
    return {
        msg: 'hello, javascript!'
    }
}

function bFun() {
    return 
    {
        msg: 'hello, javascript!'
    }
}


var a = aFun(),
    b = bFun();

console.log(a, b);   // a的打印结果:{ msg: 'hello, javascript!' } ,b的打印结果: undefined

关于分号

如果是计算机专业的,进入大学的第一堂课可能就是 C 语言。学 C 的时候我们总是会养成一个习惯,要加分号。像 JS 这种与C语言风格相似的语言,如果抱着不管如何,都加了分号这种想法是不正确的。就如同上面的代码,光知道加分号,仍然会造成结果偏差。所以,与其抱着一棒打死的心态、保守地写代码,不然深入了解它,与它做朋友,化其为己用。

JavaScript 中有这样一个机制:ASI(自动分号补齐)

也就是:在JavaScript中,行尾的分号有一种自动插入机制,如果新起了一行,并且这新的一行不能追加到当前语句时,会自动追加一个分号

就比如这里的:

function test() {
    return
    {
        console.log('ASI');
    }
}

会被解析为:

function test() {
    return;
    {
        console.log('ASI');
    }
}

在这点上Vue 的作者尤雨溪有在知乎上说的很明确,欢迎大家读读他的文章:

js中return有什么设计错误? - 尤雨溪的回答 - 知乎

第一篇,作为见面礼,很短内容很少,但是我觉得很新颖也很基础重要,很适合作为基础学习的第一篇。

下一篇,我想讲讲 JS 的作用域与垃圾回收机制
喜欢的话,欢迎给我的这个 Github 项目点个 Star