比如(function(){console.log(1);})()这里把function包起来的()的用处和原理,和最后的()运行上一个函数,他的原理是什么,为什么会运行上一个函数表达式。还有+function(){console.log(2);//同时返回NaN}()-function(){console.log(3);//同时返回NaN}()!function(){console.log(4);//返回true}()为什么会返回NaN和true?为什么只有+-!可以运行,其他的却不行,会报错?有没有其他办法来运行匿名函数,不用下面的方式,也就是在最后不使用()(function{...}())()+function(){...}()-function(){...}()来运行匿名函数的方法
2 回答
精慕HU
TA贡献1845条经验 获得超8个赞
其实能这样写的原因,是因为javascript的function是第一类对象,即function可以赋值给变量functiondemo(){console.log('demo');}demo();//demo我们只是在这个变量的后面加上对括号,为什么能执行这个函数呢?因为这个demo指向了一个函数,所以我们是间接的执行了函数了解了上面的一点后,我们知道javascript是面向对象的变成语言,但是它也可以实现部分的函数式编程特性。举个例子,有两个函数,分别是让两个数相加和求一个数的平方functionadd(a,b){returna+b;}functionsquare(x){returnx*x;}那么我们调用的时候,是这样调用的square(add(2,3));但是呢,这样看着挺不清爽的,利用js的函数式编程特性,我们可以这么写functionaddToSquare(a,b){varx=a+b;returnfunction(){returnx*x;}}addToSquare(2,3)();//25后面的小括号同样是执行,执行前面的函数返回的一个函数,体现了函数的传递性~函数式编程。
添加回答
举报
0/150
提交
取消