放松也可以作为自己失意时麻痹自己的一个绝妙借口,亦真亦假,实难分辨,最怕此时当局者迷。
说出来我是不信的,关于函数居然还有下面这种用法:
var fun = new Function("console.log(1)");
fun();//输出1
所以此时可以出现下面这种情况:
var timer = setTimeout("console.log(1)" , 1000);//等同于下面这句
var timer = setTimeout(function(){console.log(1);} , 1000)
接下来了解关于函数声明和函数表达式的相关概念。由此带来的主要问题是函数声明具有声明提升的概念,即我们可以在函数声明之前就调用函数。但是对于函数表达式来说,这样做并不可以。相同的是,这两种写法都将函数变量暴露在当前的执行环境中。
//下面的是一个函数声明
function fun1(num){return num};
//下面的是一个函数表达式
var fun2 = function(num){console.log(num);}
而对于我们主题中的立执行函数来说,匿名函数是立执行函数的必备部分。匿名函数不能够单独存在,像下面那样就是错的:
function(num){return num;}//error
立执行函数有多种写法:
(function(num){console.log(num);})(1);//最稳妥的,满分推荐
(function(num){console.log(num);}(1));
//杀马特式写法,使用某些运算符
!function(num){console.log(num);}(1);
~function(num){console.log(num);}(1);
+function(num){console.log(num);}(1);
-function(num){console.log(num);}(1);
//不知所以式写法
void function(num){console.log(num);}(1);
END
网友评论