gpt4 book ai didi

javascript - 如何为非匿名函数的 getJson 回调添加额外的参数?

转载 作者:行者123 更新时间:2023-11-30 17:12:35 26 4
gpt4 key购买 nike

我有以下工作代码:

newParam=1;
$.getJSON('http://date.jsontest.com/', (function (x) {
return function (data) {
alert(x);
}}(newParam)));

newParam=2;

demo

我想让内部函数非匿名。但我不能:

newParam=1;
$.getJSON('http://date.jsontest.com/', (function (x) {
return func ;}(newParam)));

newParam=2;

function func(data) {
alert(x);
}

消息:x 未定义

请帮助重构此代码。

最佳答案

如果您希望内部函数可以访问外部函数的作用域(在本例中为 x 参数),您需要在外部函数中实际声明内部函数,如下所示:

newParam=1;
$.getJSON('http://date.jsontest.com/', funcFactory(newParam));

function funcFactory(x) {
return function func(data) {
alert(x);
};
}

或者您可以按照 dfsq 的建议修改您的第二个示例以使用 .bind() 但进行一些调整 - 使用它来设置 this 对象但是 不是参数(因为 jQuery 将在使用 JSON 请求的结果调用它时设置参数):

newParam=1;
$.getJSON('http://date.jsontest.com/', function (x) {
return func.bind({param: x});
}(newParam));

newParam=2;

function func(data) {
alert(this.param); // note use of this
alert(data);
}

演示:http://jsfiddle.net/x0eqpv6f/11/

虽然如果你打算使用 .bind() 你根本不需要匿名函数:

$.getJSON('http://date.jsontest.com/', func.bind({param: newParam}));

function func(data) {
alert(this.param); // note use of this
alert(data);
}

演示:http://jsfiddle.net/x0eqpv6f/12/

关于javascript - 如何为非匿名函数的 getJson 回调添加额外的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26699377/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com