如何使用回调来访问此变量?

时间:2016-11-28 10:44:06

标签: javascript

我在myFunc内拨打了myFunc2。现在,当我使用回调概念调用var2时,我想要打印myFunc2。我知道有些事情是错的。我试过的代码不起作用。

显示此错误:

  

未捕获的ReferenceError:未定义newfunc(...)

我该如何解决?

CODE:

<html>
<head>
    <title></title>
    <script>
        function myFunc(parameter){
            var var2="another thing";
            newfunc(var2);
        }
        function myFunc2(){
            var var1="Something";
            myFunc(newfunc(some));
            console.log(var1);
            console.log(var2);
        }
    </script>
</head>
<body>
<button onclick="myFunc2()">BUTTON</button>
</body>
</html>

编辑:

根据评论,我没有违抗newfunc()。现在我已经定义了它。但它不起作用。

<script>

        function myFunc2(){
            var var1="Something";
            myFunc(function newfunc(some){
                console.log(var2);
            });
            console.log(var1);
        }
        function myFunc(parameter){
            var var2="another thing";
            newfunc(var2);
        }
    </script>

3 个答案:

答案 0 :(得分:0)

这是它的工作方式:

  var a = function myFunc(parameter){
                var var2="another thing";
                parameter.call();
          }

    a(function(){console.log("the function parameter")})

答案 1 :(得分:0)

我不确定你想要实现的目标。是这样的吗?

&#13;
&#13;
 var var2;
 function myFunc(parameter){
    var2="another thing";
    return var2;
 }
 function myFunc2(){
     var var1="Something";
     myFunc(var1);
     console.log(var1);
     console.log(var2);
}
&#13;
<button onclick="myFunc2()">BUTTON</button>
&#13;
&#13;
&#13;

您可以查看Fiddle

答案 2 :(得分:0)

函数无法共享在各自范围内定义的变量,但可以使用argumentsreturn值共享其值。这是2个功能如何说话。

还要记住,当您在函数名称后添加()时,会立即调用它。如果您需要传递回调,则必须传递引用(functionName)。

您可以参考以下帖子:Passing parameters to a callback function了解更多信息。

function newfunc(str){
  return "The test String is: " + str;
}

function myFunc(callback) {
  var var2 = "another thing";
  // return value
  return callback(var2);
}

function myFunc2() {
  var var1 = "Something";
  // Accept value that is returned and save it in local variable
  // Also adding "()" after function name will call it and pass its return value as argument.
  // If you even need to pass reference of a function with callback, use `.bind(context, args)`
  var var2 = myFunc(newfunc);
  console.log(var1);
  console.log(var2);
}
<button onclick="myFunc2()">BUTTON</button>

Snippet 2解释

首先,在()中定义函数将使其成为表达式,并且不会保留其引用。因此,您的功能仍然无法访问。

其次,当您将函数作为回调传递时,它的引用是共享的,并且可以通过参数名称获得。在您的情况下parameter。因此,而不是newfunc(var2)parameter(var2)

第三,var2内不存在newfunc。您正在使用参数(some)共享价值。用它来记录。

function myFunc2() {
  var var1 = "Something";
  // Here newfunc will be ddestroyed after the call as it is wrapped inside ()
  myFunc(function newfunc(some) {
    console.log(some);
  });
  console.log(var1);
}

function myFunc(parameter) {
  var var2 = "another thing";
  parameter(var2);
}

myFunc2();