我写了一个数组对象,然后在数组中循环。我正在使用下划线 _.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');