这种写法叫立即执行函数。一般我们定义一个函数,如:
function A(){
alert('s');
}
这个函数不会执行,如果需要定义完一个函数,马上执行。就要写成这样的:
(function A(){alert('s');})();
最后面的小括号表示调用的意思,函数被一个括号包裹起来表示这是一个整体,如果没有这个括号,js引擎可能以为这个是函数声明。这种写法并不是唯一的。
!function A(){alert('s');}();
-function A(){alert('s');}();
+function A(){alert('s');}();
~function A(){alert('s');}();
这些都是,前面的符号只要告诉js引擎这一行是一个表达式,而不是函数声明都可以。
var A=function(){};
//如果这里调用A();肯定是声明式函数执行,弹出2。如果没有声明式函数,则报错。
var A=function(alert('1')){};
//如果这里调用A(),弹出1。var声明的变量会覆盖声明式函数。
function A(){alert('2')};//永远先解析
function A(){
alert('s');
}
这个函数不会执行,如果需要定义完一个函数,马上执行。就要写成这样的:
(function A(){alert('s');})();
最后面的小括号表示调用的意思,函数被一个括号包裹起来表示这是一个整体,如果没有这个括号,js引擎可能以为这个是函数声明。这种写法并不是唯一的。
!function A(){alert('s');}();
-function A(){alert('s');}();
+function A(){alert('s');}();
~function A(){alert('s');}();
这些都是,前面的符号只要告诉js引擎这一行是一个表达式,而不是函数声明都可以。
var A=function(){};
function A(){}
var foo=function(){}称之为函数表达式 定义函数,function foo(){}称之为函数语句 定义函数。
后者会预先编译;前者则必须执行后面语句后才会对foo添加调用。
//如果这里调用A();肯定是声明式函数执行,弹出2。如果没有声明式函数,则报错。
var A=function(alert('1')){};
//如果这里调用A(),弹出1。var声明的变量会覆盖声明式函数。
function A(){alert('2')};//永远先解析