Javascript 当声明具有相同名称的局部变量时,函数将变得未定义
我在文件中声明了一个函数,使其成为全局函数:Javascript 当声明具有相同名称的局部变量时,函数将变得未定义,javascript,variables,scope,Javascript,Variables,Scope,我在文件中声明了一个函数,使其成为全局函数: 函数speakService(){ var speakService={}; var speak=函数(单词){ console.log(word); }; speakService.speak=speak; 返回语音服务; }变量未定义的原因是。当您编写类似于var x=3的内容时,x的定义将被提升到当前范围的顶部(在本例中,由于您使用的是var,因此该定义起作用)。当你点击那一行时,作业本身就发生了 因此,在您的特定情况下,当您输入该变量的作用
函数speakService(){
var speakService={};
var speak=函数(单词){
console.log(word);
};
speakService.speak=speak;
返回语音服务;
}
变量未定义的原因是。当您编写类似于var x=3
的内容时,x
的定义将被提升到当前范围的顶部(在本例中,由于您使用的是var
,因此该定义起作用)。当你点击那一行时,作业本身就发生了
因此,在您的特定情况下,当您输入该变量的作用域时,首先定义它
var speakService
,这将隐藏作用域其余部分的函数speakService
。然后您尝试执行行speakService=speakService()
,因为speakService
只是一个未初始化的变量,所以您得到了未定义的变量 变量未定义的原因是。当您编写类似于var x=3
的内容时,x
的定义将被提升到当前范围的顶部(在本例中,由于您使用的是var
,因此该定义起作用)。当你点击那一行时,作业本身就发生了
因此,在您的特定情况下,当您输入该变量的作用域时,首先定义它
var speakService
,这将隐藏作用域其余部分的函数speakService
。然后您尝试执行行speakService=speakService()
,因为speakService
只是一个未初始化的变量,所以您得到了未定义的变量 这是因为javascript的
将与
function() {
var speakService; //Declaration moved to top
speakService = speakService(); //here speakService is undefined
return speakService;
}
这是因为javascript的 将与
function() {
var speakService; //Declaration moved to top
speakService = speakService(); //here speakService is undefined
return speakService;
}
正如其他人所说,你的问题是提升。只需返回一个对象文本并使用该模式
var myService=(函数speakService(){
var speak=函数(单词){
console.log(word);
};
返回{
说:说
};
})();
myService.speak(“测试”)代码>正如其他人所说,您的问题是提升。只需返回一个对象文本并使用该模式
var myService=(函数speakService(){
var speak=函数(单词){
console.log(word);
};
返回{
说:说
};
})();
myService.speak(“测试”)
您不需要在speakService
函数中创建命名变量。只需返回一个带有指定speak函数的对象文本。您不需要在speakService
函数中创建命名变量。只需返回一个带有指定speak函数的对象文本。事实上,具有相同名称的变量的声明隐藏了全局变量。全局变量仍然可用,例如,通过使用windows对象对其进行引用。我刚刚测试过这个。我不知道这跟吊装有什么关系。即使不将变量声明移到函数顶部,全局变量也会被隐藏——或者我错了吗?事实上,使用相同名称的变量声明会隐藏全局变量。全局变量仍然可用,例如,通过使用windows对象对其进行引用。我刚刚测试过这个。我不知道这跟吊装有什么关系。即使不将变量声明移到函数顶部,全局变量也会被隐藏——或者我错了?