function createFunctions(){
var result=new Array();
for(var i=0;i<10;i++){
result[i]= function(){
return i;
}();
}
return result;
}
var arr=createFunctions();
alert(arr);//[0,1,2,……,9]
我想立即调用匿名函数来给result[index]赋值,网上查阅其中有几种方法是:
!function(){ // do something }();
~function() {}();
+function() {}();
-function() {}()
有人说function(){return i; }();会提示语法错误
实际情况是function(){return i; }();并没有提示错误。而function前面添加+-!~会改变匿名函数返回值
(1)请问可以使用function(){return i; }()的格式来完成立即调用吗??
(2)如果匿名函数不是立即执行的,那么它会在什么时刻被执行??
(3)匿名函数声明的变量怎样才能被销毁?在什么时候才会被销毁?
单独调用
function(){return 1; }();
// VM263:2 Uncaught SyntaxError: Unexpected token (
是会报错的
一般可以通过把匿名函数变成立即调用的函数表达式,例如
var f = function() {}();
+function(){ return 1; }()
(function(){ return 1; })()
...
显然,你已经把匿名函数转成立即调用的函数表达式了。
具体参考: http://www.zhihu.com/question/20249179
;(function({
//do
}))();
具体应该说是result= function(){//dosomething}();不会有语法错误吧,function(){//dosomething}();单独执行还是有语法错误的。
result=
function(){//dosomething}();
2.!function(){ // do something }();
3.~ function() {}();
4.+ function() {}();
5.- function() {}()
原理是语句function(){//dosomething}()都被当作表达式处理了(赋值前计算表达式的值),就是2、3、4、5例可以自执行,自执行的原因也是function(){//dosomething}()由于前面的符号被当作表达式处理了。
至于result= function(){//dosomething}();不会有语法错误就是因为赋值语句把右边的function(){//dosomething}()当作表达式处理了,然后将结果赋给result。