js 堆栈溢出

JavaScript011

js 堆栈溢出,第1张

目测不会有问题,也不会你想要的效果

if (s==3){t=0}这里你写错了吧,应该是s=0吧。obj.src=ImgName[t]??乱七八糟

你的代码执行流程:

1、obj.src='/images/loading.gif'赋值后,就等着小图标onload

2、小图标加载完成时,把图片地址改成当前图片地址,等图片onload(不会有你要的效果,小图标被替换了,缓存、网速快的话瞬间完事)

3、图片onload时,又修改地址为自身,不会触发onload了

我猜IE栈溢出是第3步的问题,改了图片地址就触发onload,不知道是什么版本IE

还有啊,图片地址用数组不好么,还搞个类多麻烦

var strimg=[]

strimg[0]="/upfile/2013-11/sfsfsf.jpg"

strimg[1]="/upfile/2013-11/sfsdfsdfsdf.jpg"

strimg[2]="/upfile/2013-11/sdfsdfsd.jpg"

要图片加载完毕前,小图标还在转的话,不要轻易覆盖掉小图标的地址,另外建个IMG加载图片

var s=0

function imgshow(obj){

    s<strimg.length&&++s||(s=0)//你定义了length属性,却不用?

    obj.src='/images/loading.gif'

    var img=new Image()

    img.src=strimg[s]

    img.onload=function(){

        obj.src=img.src//图片加载完毕后再显示

    }

}

你这个是因为你进入死循环了,以name属性为例,你name属性的get访问器的代码是:

return "hello! I'm " + this.name

此时return中包含this.name,而这个this.name又会再次进入你的get访问器,然后又发现有name又进入你的访问器,死循环直到内存溢出,你的age属性的set访问器一样的道理,改成下面这样就可以了。

var person = { }

(function () {

    var _name = "Rainn", _age = 25

    Object.defineProperties(person, {

        name: {

            get: function () {

                return "hello! I'm " + _name

            },

            set: function (newValue) {

                _name = newValue + "(changed)"

            }

        },

        age: {

            get: function () {

                return "18 forever"

            },

            set: function (newValue) {

                _age -= 1

            }

        }

    })

})()