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();