我有以下工作代码:
newParam=1;
$.getJSON('http://date.jsontest.com/', (function (x) {
return function (data) {
alert(x);
}}(newParam)));
newParam=2;
我想让内部函数不是匿名的。但我不能:
newParam=1;
$.getJSON('http://date.jsontest.com/', (function (x) {
return func ;}(newParam)));
newParam=2;
function func(data) {
alert(x);
}
消息:x is not defined
请帮助重构此代码。
答案 0 :(得分:2)
如果希望内部函数能够访问外部函数的作用域(在本例中为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);
}