猿问

js 的上下文环境

function l() {

    console.log(item);

}


[1, 2, 3].forEach(item => {

    l();

});

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


慕尼黑8549860
浏览 484回答 4
4回答

阿波罗的战车

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);});

Cats萌萌

不存在的,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();});
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答