这样写是对的
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);
这是为什么呢?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
同样道理,下面那个报错的代码块
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,其实是定义成全局变量了。
第二个,我不知道你想干什么,
这是一个构造函数,没有返回任何东西,byteArrayUntil为undefined。
其实你把byteArrayUntil给console出来,就都清楚了
作用域的问题。