为了账号安全,请及时绑定邮箱和手机立即绑定

js 的上下文环境

js 的上下文环境

慕尼黑8549860 2019-03-21 15:19:44
function l() {    console.log(item);}[1, 2, 3].forEach(item => {    l();});代码如上,我要在forEach的上下文中执行 l函数,在l函数里面会打印 item,但是这样会报错,我该如何正确的让 l函数执行,并打印1,2,3

4 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

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

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

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


查看完整回答
反对 回复 2019-04-10
?
撒科打诨

TA贡献1934条经验 获得超2个赞

function l(item) {

    console.log(item);

}


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

    l(item);

});


把参数传进去


查看完整回答
反对 回复 2019-04-10
?
潇湘沐

TA贡献1816条经验 获得超6个赞

function l(){

    console.log(this);

}


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

    l.call(item);

});


查看完整回答
反对 回复 2019-04-10
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

不存在的,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();

});


查看完整回答
反对 回复 2019-04-10

添加回答

代码语言

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信