作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用作为变量传递的参数调用匿名函数时遇到问题。如果我在将一个变量作为参数传递给它之后将匿名函数保存到一个数组中,然后我更改变量并调用该函数,它会打印变量的最后一个值,而不是我推送匿名函数时变量的值进入我的阵列。我在以下示例中简化了我的代码:
var arr = [];
function myFunction(index) {
alert(index);
}
function doPush() {
var k = 'hello';
var f = function(){myFunction(k);};
arr.push(f);
k = 'goodbye';
}
function invoker(op) {
op();
}
function invokePushed() {
invoker(arr[0]);
}
doPush();
invokePushed();
好吧,invokePushed(); alert 'goodbye' 而不是 'hello'.. 我的目标是将几个函数存储到数组中并按顺序调用它们,但这样我数组中的所有函数都具有相同的(最后一个)参数值。
我知道我可以通过将函数的字符串表示形式插入数组来解决这个问题:
var f = 'myFunction(\''+k+'\');';
并在调用函数中用eval调用,但我希望使用第一种方法。
这可能吗?
谢谢,
亚历山德罗。
最佳答案
您必须创建一个新范围,其中捕获 k
的当前值。 JavaScript 只有函数作用域,因此您可以使用立即函数 执行此操作:
var f = (function(value) {
return function(){myFunction(value);};
}(k));
您可以通过创建一个生成匿名函数的命名函数来使其更具可读性:
function getFunction(value) {
return function(){myFunction(value);};
}
// later
var f = getFunction(k);
关于javascript - JS 将参数作为变量传递给匿名函数,稍后再调用 -> 参数值问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4967261/
我有本地更改和远程更改。 有人告诉我必须先推,再 pull 。这背后有什么原因吗? 最佳答案 那个人错了:正确的模型是pull-before-you-push,而不是相反。 当您pull时,git 将
我正在使用最新版本的 Flat UI Pro 1.3.2 ( http://designmodo.com/flat/ ),jQuery 插件 flatui-radiocheck v0.1.0 和 iO
我是一名优秀的程序员,十分优秀!