Array.prototype.map() 的callback如何使用调用map的函数的变量?

function a(count) {
  return [1,2,3].map(val => val + count);
}

function b(count) {
  return [1,2,3].map(fn);
}

function fn(val) {
  return val + count;
}

console.log('a' + a(9));
console.log('b' + b(9));

Function a中,map的callback使用arrow function直接定义在function a中,那么map的callback是可以使用count变量的。

如果我想复用map的callback函数,如function b,那么这个callback如何取得count的值呢? 如上面的代码,会抛出ReferenceError: count is not defined 错误。

阅读 2.9k
3 个回答
function fn(count) {
    return function(val) {
        return count + val;
    }
}

function a(count) {
    var cb = fn(count);
    return [1, 2, 3].map(cb);
}
function a(count) {
    return [1,2,3].map(val => val + count);
}

function b(count) {
    return [1,2,3].map(fn, count);
}

function fn(val) {
    return val + this;
}

console.log('a' + a(9));
console.log('b' + b(9));

这是一个作用域延伸的问题,javascript的变量作用域是可以延伸到其他函数内,但是这个函数一定要在其作用域里面定义。比如:

function a(val){
    function b(){
        console.log(val)
    }
    b();
}

这是可以访问的。如果b函数定义在外面:

function a(val){        
    b();
}
function b(){
    console.log(val)
}

这是不行的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题