比如
(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(){...}()
来运行匿名函数的方法
后面() 表示执行这个函数。
这是一个函数声明,不能直接执行,js 无法解析。
function前使用~ ! - +的目的是为了消除函数声明和函数表达式间歧义。
也就是说 function(){ /* code */ } 这是一个函数声明,如果直接在函数声明后使用 "()" 来调用, js 解析器无法解析,会提示:SyntaxError: unexpected_token 错误。
关于这个可以参考文章:http://swordair.com/function-and-exclamation-mark/
返回值的问题。
你例子等价上述。function return 结果为 undefined,undefined隐式转化为数字,结果为NaN, 所以 +undefined 的结果为NaN,- 等同。!是逻辑操作符,所以undefined隐式转化boolean,结果为false,所以!undefined 的结果就为true
其实能这样写的原因,是因为javascript的function是第一类对象,即function可以赋值给变量
我们只是在这个变量的后面加上对括号,为什么能执行这个函数呢?因为这个demo指向了一个函数,所以我们是间接的执行了函数
了解了上面的一点后,我们知道javascript是面向对象的变成语言,但是它也可以实现部分的函数式编程特性。
举个例子,有两个函数,分别是让两个数相加和求一个数的平方
那么我们调用的时候,是这样调用的
但是呢,这样看着挺不清爽的,利用js 的函数式编程特性,我们可以这么写
后面的小括号同样是执行,执行前面的函数返回的一个函数,体现了函数的传递性~函数式编程。
上面的答案已经很全了,我再补充一点,
var a=function(){b=4}();
类似于这个样子也是立即执行函数里面的内容,alert(b);
这个时候就会弹出4.这里已经讨论过这个问题了,http://segmentfault.com/q/1010000000442042
javascript中使用 ()将函数声明括起来可以使声明变成表达式,在表达式的后面加上()就可以执行。
http://segmentfault.com/a/1190000000660786
前端真的学的好累..一开始不懂我就很不明白()()是什么意思
说白了,其实就是第一个()return一个function,再用()执行 仅此而已
还好学了几个月,总算有点头绪了
第一个括号里面是一个函数表达式。
(...)()
是使用函数调用运算符来执行一个函数。