Неперехваченная ошибка ссылки: helloSpeaker не определен

#javascript #html #jquery

#javascript #HTML #jquery

Вопрос:

Я новичок в JavaScript и пытаюсь что-то закодировать, но у меня не получилось заставить это работать. Я также определил jQuery, но это не решило проблему. В нем говорится:

Неперехваченная ошибка ссылки: helloSpeaker не определен

 (function(window) {
  var helloSpeaker = {};
  helloSpeaker.speak = function(name) {
    console.log(speakWord   " "   helloSpeaker.name);
  }
  var speakWord = "Hello";
  window.helloSpeaker = helloSpeaker;
}(window));

//script.js
(function() {
  var names = ["Yaakov", "John", "Jen", "Jason", "Paul", "Frank", "Larry", "Paula", "Laura", "Jim"];
  for (var i = 0; i < names.length; i  ) {
    var firstLetter = names[i].charAt(0).toLowerCase();
    if (firstLetter === 'j') {
      byeSpeaker.speak(names[i]);
    } else {
      helloSpeaker.speak(names[i]);
    }
  }
})();  
 <!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Module 4 Solution Starter</title>
  <script src="SpeakHello.js"></script>
  <script src="SpeakGoodBye.js"></script>
  <script src="script.js"></script>
  <script language="JavaScript" type="text/javascript" src="js/jquery-3.5.1.min.js"></script>
</head>
<body></body>
</html>  

Комментарии:

1. пожалуйста, попробуйте указать ошибку, которую вы получаете

2. пожалуйста, вставьте все ваши коды и объясните, чего вы хотите достичь

3. Вы показали код, который определяет helloSpeaker() , но не код, который его использует и вызывает ошибку.

4. @Berg_Durden это не должно иметь значения, поскольку объявление переменной поднимается в начало определения функции (инициализация происходит там, где она записана).

5. Я поместил ваш код во фрагмент, где он работает нормально, вплоть до того момента, когда вы вызываете byeSpeaker , но это просто потому, что он не определен в примере. Показанный вами код не демонстрирует проблему, которую вы описываете

Ответ №1:

Вы просто хотите получить доступ к переданному name аргументу, который вы выполняете с помощью just name , а не helloSpeaker.name .

 (function(window) {
  var helloSpeaker = {};
  helloSpeaker.speak = function(name) {
    console.log(speakWord   " "   name);
  }
  var speakWord = "Hello";
  window.helloSpeaker = helloSpeaker;
}(window));

//script.js
(function() {
  var names = ["Yaakov", "John", "Jen", "Jason", "Paul", "Frank", "Larry", "Paula", "Laura", "Jim"];
  for (var i = 0; i < names.length; i  ) {
    var firstLetter = names[i].charAt(0).toLowerCase();
    if (firstLetter === 'j') {
      //byeSpeaker.speak(names[i]);
    } else {
      helloSpeaker.speak(names[i]);
    }
  }
})();  
 <!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Module 4 Solution Starter</title>
  <script src="SpeakHello.js"></script>
  <script src="SpeakGoodBye.js"></script>
  <script src="script.js"></script>
  <script language="JavaScript" type="text/javascript" src="js/jquery-3.5.1.min.js"></script>
</head>
<body></body>
</html>  

Кроме того, плохой практикой является прикрепление новых свойств и методов к window (глобальному) объекту, поэтому, если у вас нет какой-либо особой причины для этого, вам следует избегать этого.