繁体   English   中英

javascript不作用域功能参数

[英]javascript does not scope function parameter

我写了一个数组对象,然后在整个数组中循环循环。 我正在使用下划线_.each函数来完成这项工作。 突然在我的代码中发生了意外的事情,请考虑以下代码

var _ = require('underscore');

var myArray = [ 'RE', 'FR', 'TZ', 'SD'];

var traverse = function (element, index, list) {

    console.log(para1);
    console.log(element);

}

var func1 = function (para1) {
    _.each(myArray, traverse);
}

func1('test');

作为输出我有错误信息

Volumes/Develop/node_sample/scope.js:7
    console.log(para1);
                ^
ReferenceError: para1 is not defined
    at traverse (/Volumes/Develop/node_sample/scope.js:7:14)
    at Array.forEach (native)
    at Function._.each._.forEach (/Volumes/Develop/node_sample/node_modules/underscore/underscore.js:79:11)
    at func1 (/Volumes/Develop/node_sample/scope.js:13:4)
    at Object.<anonymous> (/Volumes/Develop/node_sample/scope.js:16:1)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)

为什么遍历功能不能识别para1变量? 我在func中执行_.each函数,并且我认为应该随范围一起使用。
但是如果我这样写代码,那么作用域链就可以正常工作

var _ = require('underscore');

var myArray = [ 'RE', 'FR', 'TZ', 'SD'];

var func1 = function (para1) {
    _.each(myArray, function (element, index, list) {

        console.log(para1);
        console.log(element);

    });
}

func1('test');

您已经回答了自己的问题。 para1仅存在于func1的范围内。 您不会以任何方式传递它来traverse

您的第二个示例很好,或者您可以这样做:

var myArray = [ 'RE', 'FR', 'TZ', 'SD'];

var traverse = function (para1, myArray) {
  _.each(myArray, function (element, index, list) {
    console.log(para1);
    console.log(element);
  });
}

var func1 = function (para1) {
  traverse(para1, myArray);
}

func1('test');

小提琴

您的变量不在作用域链中: Javascript中的作用域链

在第二个示例中,javascript在每种方法中搜索“ para1”,但没有定义。 之后,相同的搜索过程将从父函数开始(靠近func1),此时有一个名为para1的变量/自变量。

我认为您可以在上下文的帮助下para1传递到.each方法:每个 .each(list,iterator,[context])我是jQuery专家,因此您必须自己检查文档: http:// underscorejs .org /#each

希望对您有帮助

干杯

暂无
暂无

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

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