前言在看一些loader源码的时候,第一次看到这种逗号的表达方式,觉得很有意思,所以分享给大家。很多同学应该也是第一次见。概述逗号运算符计算它的每个操作数(从左到右),并返回最后一个操作数的值。在下面的代码中,只返回最后一个表达式,其他的只是计算。functionmyFunc(){varx=0;return(x+=1,x);//同样的freturn++x;}console.log((1,2));//返回2inconsoleconsole.log((a=b=3,c=4));//Returns4inconsole问题这样做有什么好处吗?只是为了改变我的写作方式吗?把return++x改成return(x+=1,x)?答案当然不高级。看下面的例子vara={foo:function(){console.log(this===window);}};a.foo();//返回'false'inconsole(0,a.foo)();//返回'true'inconsole看,一个输出false,一个输出true,为什么?在foo方法中,由于foo是a对象中的属性,直接调用a.foo()时会打印false,因为this引用了a。然而,当你执行(0,a.foo)()时,这实际上返回了一个foo方法。这个方法的this当然是window。相当于return的是下面这个方法,不属于属性function(){console.log(this===window);}这个函数不再附加任何东西,它是全局对象window,所以输出为真。经典面试题一起来看看关于逗号表达式的经典面试题吧!vari,j,k;for(i=0,j=0;i<10,j<6;i++,j++){k=i+j;}document.write(k);//10控制台结果:Then我将j更改为16.for(vari=0,j=0;i<10,j<16;i++,j++){k=i+j;console.log('i='+i+',结果j='+j+'kis:'+k);}console.log(k);//30consoleresult:before认为需要同时满足i<10和i<16才能继续循环,但事实并非如此。这主要是一个逗号语句。当有多个条件用逗号分隔时,返回最右边的条件。"
