在闭包内部分配变量 javascript
Assigning variable inside of closure javascript
我有闭包函数,我试图在其中传递实际变量,然后在闭包函数内部执行某些操作后,我希望将闭包函数的结果分配给我在函数中传递的变量。
看看这个例子,我可能听起来很愚蠢。
var foo,bar,foobar;
loadAsset(foo,'../assets/sounds/gameOverSound1_.mp3');
loadAsset(bar,'../assets/sounds/gameOverSound2_.mp3');
loadAsset(foobar,'../assets/sounds/gameOverSound3_.mp3');
function loadAsset(varsName,cAsset){
loadSound(cAsset,loadedAsset);
function loadedAsset(loadingAssetFile){
loadingCount++;
varsName = loadingAssetFile;
}
}
所以基本上我需要实现 foo = "whatever the result is in loadingAssetFile" ,bar = "whatever the result is in loadingAssetFile" 等等
我怎样才能做到这一点?
注意: 我正在使用一个名为 p5.js 的库来加载声音,loadSound
是库的一部分,它加载传递的声音和 returns一个加载的声音值。
当你传递foo
时,值被复制然后传递给函数。函数内部的任何更改都不会影响外部 foo
变量。你需要传递一个引用类型,比如对象来实现你想要的结果。
您可以传递包含属性的对象和您要更改的 属性 名称。
var obj = {
foo: '',
bar: '',
foobar;
}
loadAsset(obj, 'foo', '../assets/sounds/gameOverSound1_.mp3');
loadAsset(obj, 'bar', '../assets/sounds/gameOverSound2_.mp3');
loadAsset(obj, 'foobar', '../assets/sounds/gameOverSound3_.mp3');
function loadAsset(object, varsName, cAsset){
loadSound(cAsset, loadedAsset);
function loadedAsset(loadingAssetFile){
loadingCount++;
object[varsName] = loadingAssetFile;
}
}
编辑: 使用对象可能比使用数组更好,我只是想展示另一种方法并更详细地解释重新分配参数.
重新分配参数不会更改传入值的值。
var one = 'hello';
function change(two){
two = 'world';
}
change(one);
console.log(one); // prints 'hello'!
相反,您可以为此使用一个数组。类似于:
var assets = [];
loadAsset(0, '../assets/sounds/gameOverSound1_.mp3');
loadAsset(1, '../assets/sounds/gameOverSound2_.mp3');
loadAsset(2,'../assets/sounds/gameOverSound3_.mp3');
function loadAsset(index, cAsset){
loadSound(cAsset,loadedAsset);
function loadedAsset(loadingAssetFile){
assets[index] = loadingAssetFile;
}
}
并且由于 JavaScript 允许您使用字符串作为索引(有点...),您可以这样做:
var assets = [];
loadAsset('foo', '../assets/sounds/gameOverSound1_.mp3');
loadAsset('bar', '../assets/sounds/gameOverSound2_.mp3');
loadAsset('foobar','../assets/sounds/gameOverSound3_.mp3');
function loadAsset(index, cAsset){
loadSound(cAsset,loadedAsset);
function loadedAsset(loadingAssetFile){
assets[index] = loadingAssetFile;
}
}
我有闭包函数,我试图在其中传递实际变量,然后在闭包函数内部执行某些操作后,我希望将闭包函数的结果分配给我在函数中传递的变量。
看看这个例子,我可能听起来很愚蠢。
var foo,bar,foobar;
loadAsset(foo,'../assets/sounds/gameOverSound1_.mp3');
loadAsset(bar,'../assets/sounds/gameOverSound2_.mp3');
loadAsset(foobar,'../assets/sounds/gameOverSound3_.mp3');
function loadAsset(varsName,cAsset){
loadSound(cAsset,loadedAsset);
function loadedAsset(loadingAssetFile){
loadingCount++;
varsName = loadingAssetFile;
}
}
所以基本上我需要实现 foo = "whatever the result is in loadingAssetFile" ,bar = "whatever the result is in loadingAssetFile" 等等
我怎样才能做到这一点?
注意: 我正在使用一个名为 p5.js 的库来加载声音,loadSound
是库的一部分,它加载传递的声音和 returns一个加载的声音值。
当你传递foo
时,值被复制然后传递给函数。函数内部的任何更改都不会影响外部 foo
变量。你需要传递一个引用类型,比如对象来实现你想要的结果。
您可以传递包含属性的对象和您要更改的 属性 名称。
var obj = {
foo: '',
bar: '',
foobar;
}
loadAsset(obj, 'foo', '../assets/sounds/gameOverSound1_.mp3');
loadAsset(obj, 'bar', '../assets/sounds/gameOverSound2_.mp3');
loadAsset(obj, 'foobar', '../assets/sounds/gameOverSound3_.mp3');
function loadAsset(object, varsName, cAsset){
loadSound(cAsset, loadedAsset);
function loadedAsset(loadingAssetFile){
loadingCount++;
object[varsName] = loadingAssetFile;
}
}
编辑:
重新分配参数不会更改传入值的值。
var one = 'hello';
function change(two){
two = 'world';
}
change(one);
console.log(one); // prints 'hello'!
相反,您可以为此使用一个数组。类似于:
var assets = [];
loadAsset(0, '../assets/sounds/gameOverSound1_.mp3');
loadAsset(1, '../assets/sounds/gameOverSound2_.mp3');
loadAsset(2,'../assets/sounds/gameOverSound3_.mp3');
function loadAsset(index, cAsset){
loadSound(cAsset,loadedAsset);
function loadedAsset(loadingAssetFile){
assets[index] = loadingAssetFile;
}
}
并且由于 JavaScript 允许您使用字符串作为索引(有点...),您可以这样做:
var assets = [];
loadAsset('foo', '../assets/sounds/gameOverSound1_.mp3');
loadAsset('bar', '../assets/sounds/gameOverSound2_.mp3');
loadAsset('foobar','../assets/sounds/gameOverSound3_.mp3');
function loadAsset(index, cAsset){
loadSound(cAsset,loadedAsset);
function loadedAsset(loadingAssetFile){
assets[index] = loadingAssetFile;
}
}