Javascript 在其他函数中的函数内部使用变量
我有一个作用域问题,在这段代码中,当我调用Javascript 在其他函数中的函数内部使用变量,javascript,Javascript,我有一个作用域问题,在这段代码中,当我调用mp3.playlinfo()${titlePlayList}时,它是未定义的 如何在playlinfo:function()中使用${titlePlaylist} 问题在于,您没有在其他函数可以访问的任何位置声明titlePlaylist。 您可以通过将其添加到您创建的mp3对象来解决此问题 但是,如果您打算采用这种方法,我建议使用类而不是对象 基于对象的简单方法 const mp3={ titlePlaylist:null, createPlayli
mp3.playlinfo()
${titlePlayList}时,它是未定义的
如何在playlinfo:function()中使用${titlePlaylist}
问题在于,您没有在其他函数可以访问的任何位置声明titlePlaylist
。
您可以通过将其添加到您创建的mp3
对象来解决此问题
但是,如果您打算采用这种方法,我建议使用类
而不是对象
基于对象的简单方法
const mp3={
titlePlaylist:null,
createPlaylist:function(){
this.titlePlaylist=提示(“选择名称:”)
log(`Your playlist name:${this.titlePlaylist}`)
},
playlinfo:function(){
console.log(`ready listing${this.titlePlaylist}`)
}
}
创建播放列表();
mp3.playlinginfo()
作为mp3
是一个对象,您需要将标题播放列表
设置为mp3
的属性。然后在createPlaylist
中,需要将用户返回的值设置为titlePlaylist
的值。然后,您可以访问播放信息
中的标题播放列表
,如果您使用箭头功能,则可以跳过使用此功能。标题播放列表
:
const mp3 = {
titlePlaylist: "",
createPlaylist: () => {
titlePlaylist = prompt("Choose a name: ");
console.log(`Your playlist name is: ${titlePlaylist}`);
},
playlistInfo: () => {
console.log(`Already listening ${titlePlaylist}`);
},
};
mp3.createPlaylist();
mp3.playlistInfo();
您还可以通过利用闭包来实现此功能,闭包允许您获取和设置原始函数体中的变量范围:
const mp3Closure = () => {
let titlePlaylist = "";
return {
createPlaylist: () => {
titlePlaylist = prompt("Choose a name: ");
console.log(`Your playlist name is: ${titlePlaylist}`);
},
playlistInfo: () => {
console.log(`Already listening ${titlePlaylist}`);
},
};
};
const mp3WithClosure = mp3Closure();
mp3WithClosure.createPlaylist();
mp3WithClosure.playlistInfo();
OOP变量(如果需要):
class MP3 {
constructor(titlePlaylist) {
this.titlePlaylist = titlePlaylist;
}
titlePlaylist = null;
get titlePlaylist() {
return this.titlePlaylist;
}
set titlePlaylist(value) {
this.titlePlaylist = value;
}
createPlaylist = () => {
this.titlePlaylist = prompt("Choose a name: ");
console.log(`Your playlist name is: ${this.titlePlaylist}`);
};
playlistInfo = () => {
console.log(`Already listening ${this.titlePlaylist}`);
};
}
const mp3 = new MP3("");
mp3.createPlaylist();
mp3.playlistInfo();
按照现在的定义,你不能。在mp3
对象中将其定义为成员变量代码>作为脚本的第一行。但是您也在使用namePlaylist
…?标题播放列表应该是什么?这段代码中没有声明。是的!我刚刚编辑了它。
class MP3 {
constructor(titlePlaylist) {
this.titlePlaylist = titlePlaylist;
}
titlePlaylist = null;
get titlePlaylist() {
return this.titlePlaylist;
}
set titlePlaylist(value) {
this.titlePlaylist = value;
}
createPlaylist = () => {
this.titlePlaylist = prompt("Choose a name: ");
console.log(`Your playlist name is: ${this.titlePlaylist}`);
};
playlistInfo = () => {
console.log(`Already listening ${this.titlePlaylist}`);
};
}
const mp3 = new MP3("");
mp3.createPlaylist();
mp3.playlistInfo();