js 的上下文环境

function l() {
    console.log(item);
}

[1, 2, 3].forEach(item => {
    l();
});

代码如上,我要在forEach的上下文中执行 l函数,在l函数里面会打印 item,但是这样会报错,我该如何正确的让 l函数执行,并打印1,2,3

阅读 3k
7 个回答

js采用的是词法作用域,意即对任意变量,其上下文是定义变量时的上下文而非使用时的上下文

item是forEach中匿名函数的局部变量,函数l定义在匿名函数外部,无法访问函数内部变量。

你题目的实现可用于动态作用域的语言,目前绝大多数语言采用词法作用域

function l(item) {
    console.log(item);
}

[1, 2, 3].forEach(item => {
    l(item);
});

把参数传进去

你这个没有把参数传进去啊。。。

function l(){
    console.log(this);
}

[1, 2, 3].forEach(item => {
    l.call(item);
});

不存在的,l()的执行环境是全局,访问不到item的,除非用传递参数的方式(之前有人答过),或者访问l()的执行环境(全局)的item。

var item;
function l() {
    console.log(item);
}

[1, 2, 3].forEach(ele => {
    item=ele;
    l();
}

再或者,将l()的执行环境放到forEach里面,也就是把l()定义到forEach中。

[1, 2, 3].forEach(item => {
    function l() {
        console.log(item);
    }
    l();
});
新手上路,请多包涵

l()函数传参

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