Javascript闭包未提供预期结果
Javascript Closure not providing expected result
我正在努力理解闭包。
var a = 1;
var g = function () {
var a = a;
return function() {
console.log(a);
}
}
g()();
据我所知,函数调用g()()
应该记录a的值,即1。但它正在控制台上记录undefined
。我知道我的概念在某个地方很薄弱,但即使花了几个小时也无法理解。有人能帮忙吗?
JavaScript在整个函数范围内提升var
声明。来自外部作用域var a = 1
的变量被覆盖
这个例子相当于:
var a = 1;
var g = function () {
var a; // a is undefined
a = a; // a = undefined
return function() {
console.log(a);
}
}
g()();
在没有初始值赋值的情况下,a
就是简单的undefined
。稍后将变量分配给自身a = a
,它是一个noop,而a
仍然是undefined
。
有关变量吊装的更多信息,请查看本文。
问题是线路
var a = a;
这既是声明一个局部作用域的变量,又将其分配给自己——它不与全局a
交互。您需要使用一个不同名称的本地变量:
var a = 1;
var g = function() {
var b = a;
return function() {
console.log(b);
}
}
g()();
相关文章:
- 在underscorejs模板中使用闭包
- setTimeout可以与闭包内的函数一起使用吗
- 附加到原型属性的Do函数没有闭包
- 使用闭包共享构造函数参数
- 使用Google闭包编译器包含一个Ecmascript 6类
- 从js引擎的角度来看闭包和构造函数是如何工作的
- for循环中的JavaScript闭包
- Javascript闭包-如何防止内存泄漏
- 子类访问父类's闭包变量
- 闭包如何具体化数据封装
- Javascript.闭包和dynamic'这'实际上具有约束力
- 构造函数函数闭包变量
- 闭包js框架-将ArrayBuffer转换为字符串
- 如何在Angularjs中重构闭包中的重复代码
- 如何在 JavaScript 中同时使用函数和闭包来获得相同的结果
- 为什么我从两个函数中得到两个不同的结果;利用闭包似乎没有什么不同
- Javascript闭包显示省略结果
- 为什么我有两个不同的结果,当我执行这个javascript闭包代码
- 用Javascript闭包完成处理程序查找没有显示结果
- Javascript闭包未提供预期结果