简体   繁体   English

如何在js函数之外访问变量

[英]How to access variable outside js function

Probably trivial, but I have no idea how to do it... I want to access img outside of createThumbnail. 可能微不足道,但是我不知道该怎么做...我想在createThumbnail之外访问img。 How can I do that? 我怎样才能做到这一点?

Function 功能

function createThumbnail(){
    canvas.deactivateAll().renderAll(); 
    html2canvas($('#chartdiv'), {
        onrendered: function(canvas) {
            var img = canvas.toDataURL("image/png"),
                elem = document.getElementById("thumbnail_img");
                elem.src = img;
        }
    });
}

You are setting a local variable to the onrendered callback. 您正在将局部变量设置为onrendered回调。 Move that outside of the function and then just assign that variable from within the function. 将其移到函数外部,然后从函数内部分配该变量。

var img; //Set empty variable here.

function createThumbnail(){
  canvas.deactivateAll().renderAll();
  html2canvas($('#chartdiv'), {
    onrendered: function(canvas) {
      var elem;
      img = canvas.toDataURL("image/png");
      elem = document.getElementById("thumbnail_img");
      elem.src = img;
    }
  });
}

See this article about closures 参见这篇关于闭包的文章

You can't by default, since img is declared inside the anonymous function. 由于img是在匿名函数内声明的,因此默认情况下您不能这样做。 You'll have to assign it to something accessible from the outside. 您必须将其分配给外部可访问的对象。

var accessibleImg;

function createThumbnail(){
    canvas.deactivateAll().renderAll(); 
    html2canvas($('#chartdiv'), {
        onrendered: function(canvas) {
            var img = canvas.toDataURL("image/png"),
                elem = document.getElementById("thumbnail_img");
                elem.src = img;
            accessibleImg = img;
        }
    });
}

best is to return an object . 最好是返回一个对象 so you can "use" createThumbnail multiple times (this isn't possible with a global variable ). 因此您可以多次“使用” createThumbnail(这对于全局变量而言是不可能的 )。

This way your code is nice and you don't make the function depending on your global scope / global variables. 这样,您的代码就很好了,并且您不必根据全局范围/全局变量来创建函数。

function createThumbnail(){
    canvas.deactivateAll().renderAll(); 
    var img = {}, elem;
    html2canvas($('#chartdiv'), {
        onrendered: function(canvas) {
            img.dataUrl = canvas.toDataURL("image/png"),
            elem = document.getElementById("thumbnail_img");
            elem.src = img;
        }
    });
    return img;
}

var img = createThumbnail();
var dataUrl = img.dataUrl; // contains the dataUrl from the canvas when onrendered was called

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM