javascript - js中,用逗号分隔匿名函数是个什么写法?
阿神
阿神 2017-04-11 12:05:26
0
4
253

看到下图这样的代码,不明白地方有三个:

  • 第一个function前为什么要用感叹号?意思是把第一个函数的返回值强制转为布尔值吗?可以又没有赋值操作,转换成布尔值应该没有意义吧?

  • 第二个函数和后面的函数都用~,这是同位取反?也是没有赋值,这样用是为什么?

  • 每个匿名函数之间用逗号隔开,这是为什么?一般也是赋值的时候才用到逗号分隔吧?

阿神
阿神

闭关修行中......

모든 응답(4)
迷茫

因为声明式定义函数立即执行,解析器是无法理解的,要把声明式转化为函数表达式才能让解析器解析成功,常用的是添加(),其实添加!+-~也是可以的:

function (a){console.log(a)}('it work!')    // error 解析器无法理解,不会调用函数
(function (a){console.log(a)})('it work!')    // it work! 匿名函数被调用
!function (a){console.log(a)}('it work!')    // it work! 匿名函数被调用
+function (a){console.log(a)}('it work!')    // it work! 匿名函数被调用
-function (a){console.log(a)}('it work!')    // it work! 匿名函数被调用
~function (a){console.log(a)}('it work!')    // it work! 匿名函数被调用

逗号就是连续执行多个匿名函数

~function (a){console.log(a)}('it work!'),~function (a){console.log(a)}('it work!')    
// it work! it work! 匿名函数被调用
巴扎黑

首先,问题的关键在于理解三个操作符,分别是:

  1. 一元运算符中的逻辑非运算符(!)和按位非运算符(~)

  2. 圆括号操作符

  3. 逗号操作符

在本例中,首先声明函数的一般形式为:

function [name]([param1[, param2[, ..., paramN]]]) {
   statements
}

而如果省略掉这个[name],就变成了匿名函数。但是匿名函数单独写的话就会报错:

为了让它成为合法的表达式,这时就需要一元运算符了:

这时这个表达式就合法了。但是这时它还只是一个静态的表达式,而我们的目的是直接运行内容求值,所以就需要圆括号操作符,变成~function(){}()这种形式。而如果需要很多个批量写呢,再加上逗号操作符,变成:

~function(){}(),
!function(){}(),
!function(){}();

这样就是题中的形式了。

PHPzhong

和用括号括起来的作用一样。

直接写一个匿名函数是会报错的,必须要将它转成可识别的函数体再运行。

你甚至可以这样:

0==function(){console.log(1)}()

true && function(){console.log(1)}()

[function(){console.log(1)}()]

只要让它能够在一个作用域上就可以了

至于逗号,这是通用语法,for循环里面不是总能看见的么

for(var i=0, j=0; i<10, j<10; i++, j++) {
  // code...
}
PHPzhong

楼上的说的都挺好,我个人认为: 这就是IIFE的一种形式。

楼主可以查看一下相关知识。

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!