常常在别人的代码中看见自调用函数前加感叹号,一直搞不懂是什么个意思就在网上搜。 搜到许多相关的知识点,在此稍稍的整理了一下…
首先定义函数方式有两种:
1、函数声明:
function fn() {}
2、函数表达式:
var fn = function() {};
注:构造函数
用new关键字调用。function FunctionName() {};//函数名首字母大写 var fn = new FunctionName();
从技术上来讲,这也是一个函数表达式。
function和感叹号、小括号
通常我们调用函数的方式是
functionName();
若我们尝试在函数后加上括号,如:
function foo() {
console.log("测试数据");
}();
函数声明,如果在声明后直接加上括号调用,浏览器会报错。因为这种写法是解析器无法理解的。
而我们改为以下这种写法,就不会出现错误:
(function foo(a) {
console.log("测试数据: " + a); //输出 测试数据: 100
})(100);
或
(function foo(a) {
console.log("测试数据: " + a); //输出 测试数据: 100
}(100)); //两种方法效果一样
此处使用括号包裹定义函数体,其作用在于让一个函数声明语句变成了一个表达式。
//调用执行并将返回值取反的结果(没有返回值时为undefined)赋给变量a;
var a = !(function foo(a) {
console.log("测试数据: " + a); //输出 测试数据: 100
})(100);
console.log(a); //输出 true;
function和一元运算符
任何能将函数变成一个函数表达式的作法,都可以使解析器正确的调用定义函数。而 ! 就是其中一个,而 + 、- 、|| 等都有这样的功能。通常情况用!或()较多。其中一元操作符和取反运算符会对返回值做出计算。
var a = !(function foo(a) {
console.log("测试数据: " + a); //输出 测试数据: 100
return true;
})(100);
console.log(a); //输出 false;