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