2015-09-08 2 views
1

Я пробовал ваше решение и, похоже, прекрасно работает в переполнении стека «среда запуска кода». Возможно, мне придется сравнить его с моим исходным кодом.передать аргумент в функцию без добавления ее к вызову функции

$.getJSON("https://teamtreehouse.com/chalkers.json", function(result){ 
 

 
    var buildHtml = ""; 
 

 
    function buildLi(language){ 
 
     buildHtml += "<li>" + "<h4> language </h4> | <span>" + result.points[language] + "</span></li>"; 
 
    } 
 

 
    buildHtml += "<ul>"; 
 
    buildLi("HTML"); 
 
    buildLi("CSS"); 
 
    buildLi("JavaScript"); 
 
    buildLi("PHP"); 
 
    buildHtml += "</ul>"; 
 

 
    $(".skill-ul-container").append(buildHtml);    
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<h1>The Score</h1> 
 
<div class="skill-ul-container"></div>

я в настоящее время ищет решение передать аргумент в функцию фактически не добавляя его в вызов функции. В этом сценарии мне захотелось создать простой список <ul> с <li> элементами, которые получают их содержимое из json-файла. Как вы можете видеть, я неоднократно включал result и buildHtml в вызов функции. Но я думаю, мне не нужно это делать, правильно? Есть ли способ включить их в вызов функции по умолчанию? (Потому что они не изменяются при вызове функции)

$.getJSON("that/nice/json/file/that/stores/my/score.json", function(result){ 

    var buildHtml = ""; 

    function buildLi(language, result, buildHtml){ 
     buildHtml += "<li>" + "<h4> language </h4> | <span>" + result.points[language] + "</span></li>"; //builds <li> that contains the programming language title and a number that is stored in result.points[language] 
     return(buildHtml); 
    } 

    buildHtml += "<ul>"; 
    buildHtml = buildLi("HTML", result, buildHtml); //i want to get rid of "result and buildHtml" because these values are not supposed to be changed during the function call. 
    buildHtml = buildLi("CSS", result, buildHtml); 
    buildHtml = buildLi("JavaScript", result, buildHtml); 
    buildHtml = buildLi("PHP", result, buildHtml); 
    buildHtml += "</ul>"; 
    $(".skill-ul-container").append(buildHtml);    
}); 

Я бы благодарностью за любые советы, решения или намеков об этой проблеме.

ответ

1

Вы можете буквально удалить их параметры как в объявлении функции и все вызовы, потому что оба этих переменные находятся в области видимости для всех этой части коды ...

$.getJSON("that/nice/json/file/that/stores/my/score.json", function(result){ 

    var buildHtml = ""; 

    function buildLi(language){ 
     buildHtml += "<li>" + "<h4> language </h4> | <span>" + result.points[language] + "</span></li>"; 
    } 

    buildHtml += "<ul>"; 
    buildLi("HTML"); 
    buildLi("CSS"); 
    buildLi("JavaScript"); 
    buildLi("PHP"); 
    buildHtml += "</ul>"; 

    $(".skill-ul-container").append(buildHtml);    
}); 
+0

Спасибо за быстрый ответ. Я на самом деле пробовал это, но я всегда получаю «результат - неопределенная ошибка» – Landocal

1

Вам не нужно включать эти два параметра, если вы определяете buildLi в этом callbackfunction, поскольку обе переменные в scope функции, вы можете использовать их без проблем

+0

Спасибо за быстрый ответ. – Landocal

0

Помимо доступа к этим двум параметрам как глобальные переменные, которые можно использовать bind для создания новую версию вашей функции и исправить значение, присвоенное ключевому слову this, и любое количество аргументов, предшествующих любому, предоставленному при вызове новой функции.

+0

Спасибо за ответ, я посмотрю на это, а также :) – Landocal

Смежные вопросы