Heim > Fragen und Antworten > Hauptteil
主要是在jsonp回调的时候会用到,对于一个有时序要求的jsonp回调函数,我需要从函数名里知道它到底是哪一个请求的回调,比如
var pos = 0; setInterval(function () { var script = document.createElement('script'); script.src = 'http://example.com/xxx.jsonp?callback=callback_' + pos; window['callback_' + pos] = function (o) { .... }; document.body.appendChild(script); pos ++; }, 10000);
我需要在window['callback_' + pos]
的函数体里知道,我现在回调的是哪一个pos
传过来的结果。js能知道当前定义的函数名吗,或者调用它时用到的函数名。
大家讲道理2017-04-10 12:46:00
function func_know_father(father) { return function () { alert(father); } } a = func_know_father("a"); a(); b = func_know_father("b"); b(); //--你大概可以这么用-- function jsonp_func(pos){ return function (o) { //do sth. //access pos }; } setInterval(function() { //... window['callback_' + pos] = jsonp_func(pos); });
用闭包把需要的变量绑上去就行了。
PHP中文网2017-04-10 12:46:00
让后端把pos通过参数传进去。
如果要用js获取function的名称的话,可以这样:
非ie下用this.name,ie下只能用this.toString(),然后正则去找。
不过你现在的情况不太适用,因为'callback_' + pos只是这个function的变量,这个function其实是个匿名函数,所以并不能取到function的名称。
巴扎黑2017-04-10 12:46:00
得到当前执行函数的的函数名----arguments.callee
(function(){ //arguments.callee就是当前的匿名函数的引用 console.log(arguments.callee); })();
得到调用该函数的函数名--------当前函数名.caller
function a(){ //a.caller得到的是b函数的引用 console.log(a.caller); } function b(){ a(); } b();