JavaScript 中闭包和函数作用域的示例解释
在 JavaScript 中,运行下面代码的结果是:
function foo(x){
var num=5;
bar=function(y){
return (x+y+(++num));
}
}
console.log(foo(2));
console.log(bar(10));
console.log(bar(10));
运行该代码会输出以下结果:
undefined
TypeError: bar is not a function
原因是:
- 当调用
foo(2)时,foo函数返回值为undefined,因为没有返回任何值。 - 在
foo函数中,bar函数被声明但没有被赋值。只有在调用foo函数后,bar函数才会被赋值。因此,在第一个console.log中调用bar函数时,会出现TypeError: bar is not a function的错误。
如果要使该代码能够正常运行,可以将 bar 函数的声明和赋值放在 foo 函数的外部,如下所示:
function foo(x) {
var num = 5;
return function bar(y) {
return (x + y + (++num));
};
}
var bar = foo(2);
console.log(bar(10));
console.log(bar(10));
这样,调用 foo(2) 会返回一个函数 bar,并将其赋值给变量 bar。然后,可以调用变量 bar 来执行函数,并多次调用 bar 函数来观察输出结果。
原文地址: https://www.cveoy.top/t/topic/oIu6 著作权归作者所有。请勿转载和采集!