CNode

回家路上想起来关于Js一个有趣的东西

分享
MMrErHu发布于10 年前最后回复10 年前17 回复6346 浏览0 收藏

最近好像有点没有之前开心,换了公司但是没有以前的活力了,好像记得之前每天上班下班都挺开心的,可能主要是之前的工作氛围真的不错吧,虽然技术真的不咋的。   忽然在下班的地铁上想起来两个JavaScript的小问题,有个还和之前的leader吹过牛,拿出来正好说一下吧。

function fn1(){
    return {
        name: 'javascript'
    };
}

function fn2(){
    return 
    {
        name: 'javascript'
    };
}

var obj1 = fn1();
var obj2 = fn2();

console.log(obj1);
console.log(obj2);

  上面两个例子看起来几乎没有什么不同,但是实质上确实不同的,第一个输出会显示object类型的数据,但是第二个却会显示undefined,第一个非常显而易见,那第二个为什么呢,其实JavaScript是不需要分号这个东西的,所以第二个函数其实会被解析成

function fn2(){
    return ;
    {
        name: 'javascript'
    };
}

  所以实质上函数返回的是一个undefined。   还有一个挺好玩的例子,例如:

var func = function(){
    return 42;
}
(function(){
    console.log('a');
})();

  上面这个例子其实会语法错误,原因就是:上面的语句会解释成,一个函数带一匿名函数作为参数而被调用, 返回42后, 又一次被"调用", 这就导致了错误。所以我想起来之前hax在Jsconf上不用分号的建议是值得商榷的。

查看回复

回复 (17)

X
xcatliu#1·10 年前

人生苦短,我加分号

E
eggggger#2·10 年前

No semicolons – It's fine. Really!

C
chemzqm#3·10 年前

http://standardjs.com/ 分号完全不需要的, 以上的例子使用 eslint 都能看到报错 Screen Shot 2016-12-22 at 10.54.47 PM.png Screen Shot 2016-12-22 at 10.53.37 PM.png

S
stonephp#4·10 年前

快上,eslint airbnb 我这几天在用,爽得不要不要的

D
DevinXian#5·10 年前

没有强制用不用一说,坚持一条-团队统一即可

L
liujavamail#6·10 年前

我会这样写,

function fn1() {
  var result = {name: "test"}
  return result
}
N
nnliang#7·10 年前

还是一直加吧,养成习惯。。

R
ReakingAd#8·10 年前

所以写插件的时候要在前面加分号 ;(function(){ // ... })();

E
ekoneko#9·10 年前

论分号的重要性

Google 的 styleguide 还举了蛮多其他不规范书写的栗子

https://google.github.io/styleguide/javascriptguide.xml?showone=Semicolons#Semicolons

C
coolicer#10·10 年前

return 的大括号不是能换行,常识啊。

M
MrErHu#11·10 年前
引用 coolicerreturn 的大括号不是能换行,常识啊。

@coolicer 这个其实之前见到的一个面试题,其实对于初学者很难注意到的。

L
L-TMC#12·10 年前

有意思

Y
yinxin630#13·10 年前

这算是一个常识了, 还有不加分号的代码都是耍流氓!

A
autumnQH#14·10 年前

我书读的少。不要骗我。这是分号问题吗?

M
magicdawn#15·10 年前

http://slides.com/evanyou/semicolons#/18 分号党看了尤雨溪的 slide 之后就转非分号党了...

M
magicdawn#16·10 年前

untitled1.png

M
magicdawn#17·10 年前

这里贴几个图片吧

  1. 类return untitled1.png return 在列表中, 所以碰到 line break, 就会插入 semi

  2. 简单规则 untitled2.png 常用的 untitled3.png

参与回复
登录后即可参与回复。登录