比如
function(m){
alert(m);
}('test')这个匿名函数不会执行然而
(function(m){
alert(m);
})('test')
这样一来就行了然后有人说()的作用是让匿名函数立即执行,,果如是乎??
function(m){
alert(m);
}('test')这个匿名函数不会执行然而
(function(m){
alert(m);
})('test')
这样一来就行了然后有人说()的作用是让匿名函数立即执行,,果如是乎??
var array = new Array();
for (var i = 0; i < 10; i++) {
array[i] = (function (m) { //把这里的括号加上或者去掉,依旧返回0,1,2,3,4,5,6,7,8,9,这样一来顿生疑惑。
return m;
})(i);
}
return array;
}
var results1 = CreateArray1();
document.write("Method1 Results:<br/>");
for (var i = 0; i < results1.length; i++) {
document.write(results1[i]+"<br/>");
}
var test={
aa:function(m){
alert(m);
}('test')
}
test.aa
也是可以的
els.onclick = function(){
alert(i);
}
}这样做,每次alert出来的都只是i最后的值,这是因为js并没有java那种"块状作用域"
块状作用域简单举例就是,如
java:
for(int i = 0; i < 10; i++){
}
System.out.plant(i);//在这里面是访问不到i的而在js里面
for(var i = 0; i < 10; i++){
//scope
}
alert(i);//这里访问到得是i最后的值,这是因为这个例子与以下例子是等价的var i = 0
for(; i < 10; i++){
}
alert(i);在for循环声明i与在外面声明都是一样的,因此当我们触发onclick事件的时候,获取到得值是循环完毕后的i
for (var j = 0; j < 10; j++) {
array[j] = function () {
return j;
};
}
如果换成这个没有参数的匿名函数,就一直返回10了,不行,难道说匿名函数加了参数就可以不需要()了吗??
array[j]=function () { return j; }
没执行但是如若array[j]=function (m) { return m; }(j) 这样就执行了,所以对这2个写法表示费解。。难道说传了参数匿名函数就执行了,但是联想到我第一楼说的
比如
function(m){
alert(m);
}('test')这个匿名函数不会执行
所以费解
因为
array[j]=function (m) { return m; }(j) 和
array[j]=(function (m) { return m; })(j) 怎么等效的??呼呼,累死了,,有人明白没??
alert(m);
}('test')
加个void上去
javascript语言精粹不建议使用void
function (n) {
alert(n);
} (3)
这个不执行是因为浏览器引擎并不支持这种格式,它不知道
function (n) {
alert(n);
}
是一个函数,所以才用()括起来,告诉浏览器,这是一个函数,并且我要执行它但其实不一定用()括起来才可以,我们只要用任意运算符,"~","+","-"等等,告诉浏览器这是一个函数,都可以实现,如
~function (n) {
alert(n);
} (3)
+function (n) {
alert(n);
} (3)
-function (n) {
alert(n);
} (3)在这里 var xxx = function(){}()"=" 右边写函数,是告诉引擎右边的匿名函数是一个能执行的函数。。所以直接()能执行,
并不需要用()包括整个匿名函数了