4 回答
TA贡献1862条经验 获得超6个赞
js采用的是词法作用域,意即对任意变量,其上下文是定义变量时的上下文,而非使用时的上下文。
item是forEach中匿名函数的局部变量,函数l定义在匿名函数外部,无法访问函数内部变量。
你题目的实现可用于动态作用域的语言,目前绝大多数语言采用词法作用域
TA贡献1934条经验 获得超2个赞
function l(item) {
console.log(item);
}
[1, 2, 3].forEach(item => {
l(item);
});
把参数传进去
TA贡献1816条经验 获得超6个赞
function l(){
console.log(this);
}
[1, 2, 3].forEach(item => {
l.call(item);
});
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();
});
添加回答
举报