JavaScript函数指针作用域
JavaScript function pointer scope
这是一个关于javascript的学术问题
下面的代码段接受一个整数数组,返回一个指向函数的指针数组。所指向的函数应该返回数组的平方值。
如果输入为listfunction = sqFnList([1,2,3,4,5])
则listOfFunction[0]()
应返回1
和listOfFunction[1]()
应该返回4
但它没有。
function sqFnList(a){
var b = [];
for ( var i = 0; i <a.length; i++)
{
var sq = a[i] * a[i];
b[i] = function() { return sq;}
}
return b;
}
x = sqFnList([3,4,5])[0]()
问题是x = 25。提前感谢您的帮助
您的函数都包含对相同变量sq
的引用,一旦您实际调用函数,该变量的值为25
。您需要为每个函数创建一个单独的闭包,每个函数都有自己的sq
值的副本,以便在需要的时候捕获sq
的值:
function sqFnList(a){
var b = [];
for ( var i = 0; i <a.length; i++)
{
var sq = a[i] * a[i];
b[i] = function (the_sq) {
return function() { return the_sq;}
}(sq);
}
return b;
}
x = sqFnList([3,4,5])[0]() // x is 9
sq
的范围为sqFnList
,并且您不断更新值,在所有闭包中更改它。你需要为sq:
function sqFnList(a){
var b = [];
for ( var i = 0; i <a.length; i++)
{
var sq = a[i] * a[i];
(function(sq) {
b[i] = function() { return sq;}
})(sq);
}
return b;
}
相关文章:
- 监视函数从服务返回不起作用,但作用域函数起作用
- 将作用域存储在JSON中
- 从控制器继承了隔离的作用域以生成可重用的指令
- 从ng模板访问作用域
- 调用私有作用域
- 对父作用域的指令更新延迟了一步
- 正在$rootScope上达到控制器作用域$在内部控制器上
- 两个指令创建新的继承的和隔离的作用域-元素得到哪个
- 这两个关于 JavaScript 作用域链的例子有什么区别?
- 在具有命名作用域的自定义Polymer元素中隐藏表行
- AngularJS指令隔离作用域
- Angularjs:修改js中的作用域,稍后在页面中使用
- 访问多个指令的隔离作用域
- Javascript作用域和Ajax调用;工作不正常
- 向Angular作用域对象添加对象数组——TypeError
- ng重复中的ng模型-初始化唯一作用域属性
- 在put方法之前从作用域获取数据
- 按变量的值调用函数并保持此指针的作用域
- j在 AJAX 中调用函数时查询此指针作用域
- JavaScript函数指针作用域