javascript - 新手:关于函数对象
伊谢尔伦
伊谢尔伦 2017-04-11 10:49:46
[JavaScript讨论组]

这样写是对的

var byteArrayUntil=(function(){
   getUseData=function(data,offset){
        var arr=[];
        for(var i=0;i<=799;i++){
            arr.push(i);
        }
        return arr;
    }
   getUseJson=function(data,offset){
        var arr=[];
        for(var i=0;i<=500;i++){
            arr.push(i);
        }
        return {'hz':arr};
    }
return this;
})();
console.log(byteArrayUntil.getUseJson());
但是这样:
    var byteArrayUntil=(function(){
   this.getUseData=function(data,offset){
        var arr=[];
        for(var i=0;i<=799;i++){
            arr.push(i);
        }
        return arr;
    }
   this.getUseJson=function(data,offset){
        var arr=[];
        for(var i=0;i<=500;i++){
            arr.push(i);
        }
        return {'hz':arr};
    }

})();
console.log(byteArrayUntil.getUseJson);
这是为什么呢?
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(5)
黄舟
var byteArrayUntil=(function(){
   getUseData=function(data,offset){   //敲黑板!!!划重点!面试必考题! 声明变量不写var,就等于 window.getUseData
        var arr=[];
        for(var i=0;i<=799;i++){
            arr.push(i);
        }
        return arr;
    }
   getUseJson=function(data,offset){
        var arr=[];
        for(var i=0;i<=500;i++){
            arr.push(i);
        }
        return {'hz':arr};
    }
return this; //这里this是什么呢?是运行的上下文,这是个立即执行函数,是谁执行了它捏?是window,所以这里的this就是window 对象,辣么var byteArrayUntil = 这个return的this,辣么,byteArrayUntil 就指向了window。
})();
console.log(byteArrayUntil.getUseJson()); // 所以,byteArrayUntil.getUseJson() 就等于 window.getUseJson()

同样道理,下面那个报错的代码块
this依然等于window,this.getUseJson就等于window.getUseJson和上一题一样
但是,byteArrayUntil在这里啥都不是啊。。因为立即执行函数木有return,它就是个undefined。
so,undefined.getUseJson()必然报错了。

迷茫

第2种写法的this指向全局window,你在window.getUseJson就可以看到了

迷茫

因为第二种你没有返回这个对象啊,你调用了一个立即执行的函数,将其结果赋值给byteArrayUntil,但是第二种写法中你的这个函数没有返回啊

怪我咯

看第一个,第一个的return this 里面的this是window,也就是你把 byteArrayUntil = window 了

还有,你定义的getUseJson,其实是定义成全局变量了。

第二个,我不知道你想干什么,

function(){
   this.getUseData=function(data,offset){
        var arr=[];
        for(var i=0;i<=799;i++){
            arr.push(i);
        }
        return arr;
    }
   this.getUseJson=function(data,offset){
        var arr=[];
        for(var i=0;i<=500;i++){
            arr.push(i);
        }
        return {'hz':arr};
    }

}

这是一个构造函数,没有返回任何东西,byteArrayUntil为undefined。

其实你把byteArrayUntil给console出来,就都清楚了

怪我咯

作用域的问题。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号