<script>
(function f(){alert(1)})(f=function(){alert(2)});
f(f=function(){alert(3)});
(f,f)(f=function(){alert(4)});
</script>
function表达式的函数名 其实是在此function内和外之间加了一节scope chain 函数名是在其上的
所以函数表达式和函数声明的__parent__才会不同
在函数自己的域上 除了eval的所有var声明都是在开始执行函数内容之前做的 而一个变量声明多少次都是一样的 所以 参数和var作用是一样的 没有先后之分
eval var直道执行时才声明 它也不会覆盖任何东西 因为重复声明和一次声明是一样的 但它的作用范围只在它执行之后
<script>
var test=function test(n){
return n<1?1:test(n-1)*n;
}
var test2=test;
test=null;
alert(test2(3));//ie wrong,ff result 6
</script>
<script>
function test(n){
return n<1?1:test(n-1)*n;
}
var test2=test;
test=null;
alert(test2(3));//ff ie both wrong
</script>
posted on 2007-12-30 08:23
汪杰 阅读(238)
评论(0) 编辑 收藏 引用 所属分类:
javascript