函数外部的Javascript闭包变量访问

Javascript Closure variable access outside of function

本文关键字:变量 访问 闭包 Javascript 外部 函数      更新时间:2023-09-26

我想在img#play的函数中访问变量linky。然而,它只承担链接的最后一个已知值,我理解这是由于所谓的Javascript闭包。谷歌和尝试许多不同的东西,如返回链接在img#播放点击功能似乎不起作用。我也被告知变量song将遭受同样的问题。有人对如何使点击功能为img#播放工作的每个单独的链接,而不仅仅是最后一个有任何想法吗?

  function doSearch() {
    var searchTerm = document.getElementById('search').value;
    // Search soundcloud for artists
    SC.get('/tracks', { q: searchTerm}, function(tracks) {
      for(track in tracks) {
        console.log(tracks[track]);
        var img = document.createElement('img');
        img.setAttribute("src", (tracks[track]["artwork_url"]));
        var title = tracks[track].title.replace("'", "''''").replace("'"", "'''"");
        var song = document.createElement('div');
        var linky = document.createElement('a');
        linky.setAttribute("href", (tracks[track].permalink_url));
        img.setAttribute("onclick", "showTrackInfo('" + title + "''n" + "''n" + tracks[track].label_name + "''n''n" + "(click to close)" + "')"); 

        if (tracks[track]["artwork_url"] == null) {
          console.log(""); } 
        else { 
          var Catalog = document.getElementById('catalog');
          Catalog.appendChild(img);
          $('div#catalog').append('<img src="http://i.imgur.com/rGdvfl7.png" id="play">');

          $('img#play').click(function() {
            return this.linky;

          $.get(
            'http://soundcloud.com/oembed?' + 
            'url=' + linky + 
            '&format=json&maxheight=296'
            )
          .done(function (response) {
            song.innerHTML = response.html;
            document.getElementById("soundiframe").appendChild(song);
          });
          });
        }

      }
    });
  };

我需要上面代码中的所有变量…如果有人有什么建议,我将不胜感激。

您可以创建另一个闭包:

(function(linky, song) {
  $('img#play').click(function() {
     ...
}(linky, song));

这将保留在闭包创建时link的值