Javascript 为什么函数在全局声明变量但不使用var时有效

Javascript 为什么函数在全局声明变量但不使用var时有效,javascript,variables,parameters,global-variables,var,Javascript,Variables,Parameters,Global Variables,Var,我想将属性soundFileName声明为var soundFileName='audio/60.wav'这样就不会全局定义soundFileName,但当我这样做时,我会得到ReferenceError:soundFileName未定义 我将soundFileName的值作为参数传递给循环(soundFileName),我认为'audio/60.wav'的值应该可以传递 我怀疑这与范围或嵌套有关,但我不确定如何解决这个问题。当我使用soundFileName='audio/60.wav'时,代

我想将属性
soundFileName
声明为
var soundFileName='audio/60.wav'
这样就不会全局定义
soundFileName
,但当我这样做时,我会得到
ReferenceError:soundFileName未定义

我将
soundFileName
的值作为参数传递给
循环(soundFileName)
,我认为
'audio/60.wav'
的值应该可以传递

我怀疑这与范围或嵌套有关,但我不确定如何解决这个问题。当我使用
soundFileName='audio/60.wav'时,代码确实有效不带变量

我错过了什么?谢谢

编辑:代码现在工作和更新


///////////////////////////////////////////////////////////////
//主起动///////////////////////////////////////////////
///////////////////////////////////////////////////////////////
//启动对所有时钟的首次调用,每个时钟将启动,然后可以再次调用
(函数masterStart(){
setTimeout(函数(){
////循环音\\\\
A();
}, 0);
}());
///////////////////////////////////////////////////////////////
//循环共享选项///////////////////////////////////////
///////////////////////////////////////////////////////////////
变量选项={
声音数量:0,
maxNumberOfSounds:4
};
函数logNumberOfSounds(){//之前将选项传递到此函数中是破坏代码的原因
选项。numberOfSounds++;
//console.log('声音的数量是:'+options.numberOfSounds+');
}
///////////////////////////////////////////////////////////////
//环路A////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
函数A(){
var选项A={
播放持续时间分钟:0,
播放时间最大值:60000,
//最小和最大启动时间
startMinA:0,
startMaxA:8000,
最大容量:1,
//
startMinB:0,
StartMax:30000,
maxVolumeB:1,
//
StartInc:0,
StartMax:30000,
maxVolumeC:1,
//
startMinD:0,
startMaxD:30000,
最大容量:1,
//
起始日期:0,
StartMax:30000,
maxVolumeE:1,
//
startMinF:0,
startMaxF:30000,
maxVolumeF:1,
//
起始日期:0,
startMaxG:30000,
maxVolumeG:1,
//
startMinH:0,
startMaxH:30000,
maxVolumeH:1,
//
startMinI:0,
StartMac:30000,
maxVolumeI:1,
//
startMinJ:0,
startMaxJ:30000,
maxVolumeJ:1,
//
开始链接:0,
startMaxK:30000,
最大容量:1
};
母钟();
函数主时钟(){
setTimeout(函数(){
soundA(选项,选项A);
},10);//需要延迟调用这些函数,以便它们不使用其他函数的参数
}
函数soundA(){
var soundFileName='audio/60.wav';
fadeIn=8000;
衰减=8000;
log('soundFileName in A:'+soundFileName);
calculateStartDelay(选项A.startMinA、选项A.startMaxA);
函数calculateStartDelay(startMin、startMax){
startDelay=Math.floor(Math.random()*startMax)+startMin;
}
函数calculatePlayDuration(playDurationMin、playDurationMax){
playDuration=Math.floor((Math.random()*playDurationMax)+playDurationMin);
}
函数executePlayTools(){
计算播放持续时间(选项A.playDurationMin,选项A.playDurationMax);
循环(选项、播放持续时间、声音文件名、淡出、淡出);
console.log('A://////////');
母钟();
}
setTimeout(函数(){
if(概率值<概率输入){
maxVolume=选项A.maxVolumeA;
executePlayTools();
}否则如果(概率值<概率输入b){
maxVolume=选项A.maxVolumeB;
executePlayTools();
}否则如果(概率值<概率输入){
maxVolume=选项A.maxVolume;
executePlayTools();
}否则如果(概率值<概率输入){
maxVolume=选项A.maxVolumeD;
executePlayTools();
}否则如果(概率值<概率输入){
maxVolume=选项A.maxVolumeE;
executePlayTools();
}否则如果(概率值<概率输入f){
maxVolume=选项A.maxVolumeF;
executePlayTools();
}否则如果(概率值<概率输入){
maxVolume=选项A.maxVolumeG;
executePlayTools();
}否则如果(概率值<概率输入){
maxVolume=选项A.maxVolumeH;
executePlayTools();
}否则如果(概率值<概率输入){
maxVolume=选项A.maxVolumeI;
executePlayTools();
}否则如果(概率值<概率输入j){
maxVolume=选项A.maxVolumeJ;
executePlayTools();
}否则{
maxVolume=选项A.maxVolumeK;
console.log('Probability Else');
}
log('startDelay:'+startDelay)
},startDelay);
}
}
///////////////////////////////////////////////////////////////
//共享循环///////////////////////////////////////////////
///////////////////////////////////////////////////////////////
功能循环(选项、播放持续时间、声音文件名、淡入淡出){
console.log('so
 function loop() {
function loop(param1,param2.....){
function loop(soundFileName,playDuration, ...){
loop(options, playDuration, soundFileName, fadeIn, fadeOut);

function loop() {
          console.log('soundFileName in loop: ' + arguments[2]); //The arguments object will contain all five parameters passed to the function call. 
}
function loop(options, playDuration, soundFileName, fadeIn, fadeOut) {
  ...
  // soundFileName is now availabie in this scope
  ...
}


function getSound(soundFileName) {
  ...
  // soundFileName is now availabie in this scope
  ...
}