var i=0;
var fu = function(){
alert("ok");
}
fu.aa = 3;
for(var j in fu){
++i;
}
alert(i);
这时候i的值是1.如果
var i=0;
var fu = {a:1,b:2}
fu.aa = 3;
for(var j in fu){
++i;
}
alert(i);
将fu变为对象里,i的值是3,也就是fu.aa算进去fu了,为什么会出现这种区别?

解决方案 »

  1.   


    第一个fu.aa是静态属性  遍历时i+1   第二个fu.aa  fu对象里面没有aa属性,所以动态的添加,并赋值  遍历时 fu里面有a b aa三个属性
      

  2.   

    1.在javascript中,函数也是一个对象(这个似乎有点转不过弯来,只要知道任意一个函数都是一个对象,其构造函数为Function),可以为任意一个函数添加任意属性。
    2. for-in 语句:for-in 语句是严格的迭代语句,用于枚举对象的属性。var i=0;
    var fu = function(){
        alert("ok");
    }
    fu.aa = 3;//为函数对象fu添加了一个属性aa,值为3
    for(var j in fu){//迭代对象fu的属性(这里fu对象有一个属性,即上面的aa)
        ++i;
    }
    alert(i);
    var i=0;
    var fu = {a:1,b:2}//定义对象fu,有两个属性,分别为a=1,b=2
    fu.aa = 3;//再为对象fu添加一个属性aa,值为3
    for(var j in fu){//迭代对象fu的属性,a b aa三个
        ++i;
    }
    alert(i);