鍍金池/ 問答/HTML/ js 的上下文環(huán)境

js 的上下文環(huán)境

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

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

代碼如上,我要在forEach的上下文中執(zhí)行 l函數(shù),在l函數(shù)里面會(huì)打印 item,但是這樣會(huì)報(bào)錯(cuò),我該如何正確的讓 l函數(shù)執(zhí)行,并打印1,2,3

回答
編輯回答
我甘愿

js采用的是詞法作用域,意即對(duì)任意變量,其上下文是定義變量時(shí)的上下文而非使用時(shí)的上下文。

item是forEach中匿名函數(shù)的局部變量,函數(shù)l定義在匿名函數(shù)外部,無(wú)法訪問函數(shù)內(nèi)部變量。

你題目的實(shí)現(xiàn)可用于動(dòng)態(tài)作用域的語(yǔ)言,目前絕大多數(shù)語(yǔ)言采用詞法作用域

2018年3月29日 09:12
編輯回答
初心

不存在的,l()的執(zhí)行環(huán)境是全局,訪問不到item的,除非用傳遞參數(shù)的方式(之前有人答過),或者訪問l()的執(zhí)行環(huán)境(全局)的item。

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

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

再或者,將l()的執(zhí)行環(huán)境放到forEach里面,也就是把l()定義到forEach中。

[1, 2, 3].forEach(item => {
    function l() {
        console.log(item);
    }
    l();
});
2017年2月9日 19:53
編輯回答
離夢(mèng)

你這個(gè)沒有把參數(shù)傳進(jìn)去啊。。。

2018年7月1日 02:57
編輯回答
墻頭草
function l(){
    console.log(this);
}

[1, 2, 3].forEach(item => {
    l.call(item);
});
2018年7月18日 02:16
編輯回答
陌如玉
function l(item) {
    console.log(item);
}

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

把參數(shù)傳進(jìn)去
2018年8月26日 12:23