gpt4 book ai didi

javascript - 获取函数调用者的范围

转载 作者:数据小太阳 更新时间:2023-10-29 05:06:31 27 4
gpt4 key购买 nike

我有一个函数在 ExtJS 的第 1433 行某处中断。

var createDelayed = function(h, o, scope){
console.log(arguments); //logs undefined all round.
return function(){
var args = Array.prototype.slice.call(arguments, 0);
setTimeout(function(){
h.apply(scope, args);
}, o.delay || 10);
};
};

有什么方法可以从函数内部查看函数从哪一行执行?

(因为它是第三方库,我真的做不到

var me =this;

并记录)

最佳答案

arguments.callee.caller,它指的是调用您访问该属性的函数的函数。 arguments.callee 是函数本身。

没有传递就没有办法得到原函数的作用域。在以下示例中,您无法确定 foo 中的 this 值(除了知道此处的 this 没有发生任何特殊情况):

function foo() {
bar();
}

function bar() {
console.log(arguments.callee); // bar function
console.log(arguments.callee.caller); // foo function
}

foo();

Documentation


要获取行号,事情变得更加棘手,但您可以抛出一个错误并查看堆栈跟踪:http://jsfiddle.net/pimvdb/6C47r/ .

function foo() {
bar();
}

function bar() {
try { throw new Error; }
catch(e) {
console.log(e.stack);
}
}

foo();

对于 fiddle ,它会在 Chrome 中记录类似于以下内容的内容,行尾表示行号和字符位置:

Error
at bar (http://fiddle.jshell.net/pimvdb/6C47r/show/:23:17)
at foo (http://fiddle.jshell.net/pimvdb/6C47r/show/:19:5)
at http://fiddle.jshell.net/pimvdb/6C47r/show/:29:1

关于javascript - 获取函数调用者的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7444399/

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